带有嵌套foreach的PHP数组

时间:2016-04-17 07:15:21

标签: php mysql arrays foreach

我有一个包含sql数据的表。数据库中的某些列具有多个名称。我已经从他们创建了一个数组,但现在我需要在创建表时比较这两个数组。

$strArrayChildren = explode(',', $children);
$strArrayChildren = str_replace('and', '', $strArrayChildren);
$childCount = count($strArrayChildren);

$strArrayGrades = explode(',',$the_grades);
$strArrayGrades = str_replace('(', '', $strArrayGrades);
$strArrayGrades = str_replace(')', '', $strArrayGrades);

$grades ='';
foreach($strArrayChildren as $child){
    foreach($strArrayGrades as $grade){
       if(strpos($grade, $child) !== false){
            $grades = preg_replace('([a-z A-Z ()]+)', "", $grade);
        }elseif(strpos($grade, $child) !== true){
            $grades ='';
        }
   }
   echo "<tr>";
      echo "<td>{$child}</td>";
      echo "<td>{$last_name}</td>";
      echo "<td>Child</td>";
      echo "<td>{$grades}</td>";
   echo "</tr>";
 }

当我运行此代码时,我得到学生的成绩以匹配数组中的第一个名称,但是其余成绩仍然尝试与第一个学生匹配,即使有一个新的新行名称。

任何帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定您的数据库,但这应该有效。我正在使用静态数组发布响应。

<?php
$strArrayChildren = array("Becky"," Aaron"," Luke");
$the_grades = "9 (Susan), 5 (Luke)";
$strArrayGrades = explode(',',$the_grades);
echo "<html><body><table style='text-align: center; width: 400px;'>";
echo "<tr>";
          echo "<td>Child</td>";
          echo "<td>Grade</td>";
       echo "</tr>";
foreach($strArrayChildren as $child){
    $grades = "";
    $child = trim($child);
    foreach($strArrayGrades as $key => $grade){
        if(strpos($grade, $child) > 0){
            $grades = intval(preg_replace('/[^0-9]+/', '', $grade), 10);
        }
   }
   echo "<tr>";
      echo "<td>{$child}</td>";
      echo "<td>{$grades}</td>";
   echo "</tr>";
 }
echo "</table></body></html>";
?>

<强>解释

  1. 您需要在首次循环启动后立即初始化$grades
  2. 没有必要测试strpos()功能
  3. 的两种状态
  4. 可以安全地检查弦中针的出现位置(大于0)
  5. 您需要更改正则表达式,以便从字符串中选择数字。
  6. strpos()中修剪针头;在某些情况下会有不需要的空白区域。最好在循环开始时修剪空白