首页 > 解决方案 > 附加到带有变量的关联数组如何工作

问题描述

我正在做这个练习来理解 php 的概念和语法。我得到的错误是数组没有被文本框中的新条目附加,如果我对值进行硬编码,程序可以正常工作并打印数组价值观。但是只要我把变量放在它只是为 [0] 索引分配一个新值。这是代码:

  <label for="Name">Student Name:
  <input type="text" name="StdName" placeholder="Your name">
  </label>
  <label for="Name">Grade:
  <input type="text" name="StdGrade" placeholder="Your Grade">
  </label>
  <input type="submit" name="submit"value="submit">
</form>


<?php
  // Associative array new
  $studentName =  $_POST['StdName'];
  $studentGrade = $_POST['StdGrade'];
  $classGrades = Array();
  $classGrades['name'][] = $studentName;
  $classGrades['grade'][] = $studentGrade;
  echo "<br> <br> Your name is: $studentName and your grade is: $studentGrade <br> <br>";
    foreach($classGrades as $key=>$value){
  echo join($value,' <br>');
  }
?>```

标签: phphtml

解决方案


你的循环是错误的。你有单独的namegrade数组,所以这就是你需要循环的内容:

foreach ($classGrades['name'] as $index => $name) {
    $grade = $classGrades['name'][$index];
    echo "$name<br>$grade<br>";
}

但是,如果您不创建单独的数组并将名称和等级一起保存在一个关联数组中会更好:

$classGrades[] = ['name' => $studentName, 'grade' => $studentGrade];

然后你的循环看起来像:

foreach ($classGrades as $grade) {
    echo $grade['name'] . "<br>" . $grade['grade'] . "<br>";
}

如果您希望变量在表单提交之间保持不变,则需要使用会话变量。

<?php
session_start();

在脚本的开头。然后使用$_SESSION['classGrades']代替$classGrades,并像这样初始化它:

if (!isset($_SESSION['classGrades'])) {
    $_SESSION['classGrades'] = array();
}

推荐阅读