如何遍历数组(内部数组)的数组


how to traverse array of array(inner array) through for each

>我有以下数组

$competency = array(
    array(
        "assessment_id" => 2,
        "activity_id" => 1,
        "grade" => 10,
        "competency_grade" => array(
            array(
                "competency_id" => 1,
                "grade" => 10
            ) ,
            array(
                "competency_id" => 1,
                "grade" => 10
            )
        )
    ) ,
    array(
        "assessment_id" => 2,
        "activity_id" => 1,
        "grade" => 10,
        "competency_grade" => array(
            array(
                "competency_id" => 1,
                "grade" => 10
            ) ,
            array(
                "competency_id" => 1,
                "grade" => 10
            )
        )
    )
);

我把它打印为

 echo "<pre>";
 print_r($competency);  

此行给出的结果为

Array
(
    [0] => Array
        (
            [assessment_id] => 2
            [activity_id] => 1
            [grade] => 10
            [competency_grade] => Array
                (
                    [0] => Array
                        (
                            [competency_id] => 1
                            [grade] => 10
                        )
                    [1] => Array
                        (
                            [competency_id] => 1
                            [grade] => 10
                        )
                )
        )
    [1] => Array
        (
            [assessment_id] => 2
            [activity_id] => 1
            [grade] => 10
            [competency_grade] => Array
                (
                    [0] => Array
                        (
                            [competency_id] => 1
                            [grade] => 10
                        )
                    [1] => Array
                        (
                            [competency_id] => 1
                            [grade] => 10
                        )
                )
        )
   )

现在我尝试在第一个表中的两个表中插入数据,我使用键 assessment_id,activity_id,基于它返回插入的 id,并在第二个表中使用此插入的 id 作为下面的代码

foreach ($competency as $key => $value) {
    foreach ($value as $innerkey=>$innervalue)
    {
       //echo "<pre>"; print_r($innerkey[0]);
         $query = "insert into grading set user_id = '".$user_id."',
                     assessment_id = '".$innervalue['assessment_id']."',
                     activity_id = '".$innervalue['activity_id']."',
                     date = now(),
                     grade = '".$innervalue['grade']."'";
       $result = mysql_query($query);
       $grading_id=  mysql_insert_id();
          if($innerkey=="competency_grade"){
            //foreach ($innervalue as )
            foreach ($innervalue as $mostinnerkey =>$mostinnervalue)
            {
               $query1 = "insert into competency_grade set 
                competency_id = '".$mostinnervalue['competency_id']."',
                grade = '".$mostinnervalue['grade']."' ,
                grading_id = $grading_id  ";
                $result1 = mysql_query($query1);
                echo mysql_error();
              //print_r($mostinnervalue['competency_id']); echo "<br>";
              //print_r($mostinnervalue['grade']);echo "<br>";
          }
      }
    }
}

但是我找不到解决方案请帮助我

问候

****your error might fixed use following script****     
foreach ($competency as $key => $value) {
         $query = "insert into grading set user_id = '".$user_id."',
                     assessment_id = '".$value['assessment_id']."',
                     activity_id = '".$value['activity_id']."',
                     date = now(),
                     grade = '".$value['grade']."'";
       $result = mysql_query($query);
       $grading_id=  mysql_insert_id();
       foreach ($value as $innerkey => $innervalue)
       {
            if($innerkey=="competency_grade"){
         foreach ($innervalue as $mostinnerkey =>$mostinnervalue)
              {
                   $query1 = "insert into competency_grade set competency_id = '".$mostinnervalue['competency_id']."',
                                                                grade = '".$mostinnervalue['grade']."' ,   
                                                                grading_id = $grading_id  ";
                    $result1 = mysql_query($query1);
                    echo mysql_error();
              }
            }
      }

你不需要第二个循环删除它并替换

$innervalue['assessment_id']

跟:

$value['assessment_id']

完整的代码可能如下所示:

foreach ($competency as $key => $value) {
     $query = "insert into grading set user_id = '".$user_id."',
                 assessment_id = '".$value['assessment_id']."',
                 activity_id = '".$value['activity_id']."',
                 date = now(),
                 grade = '".$value['grade']."'";
   $result = mysql_query($query);
   $grading_id=  mysql_insert_id();
   $query1 = "insert into competency_grade set 
         competency_id = '".$value['competency_grade']['competency_id']."',
         grade = '".$value['competency_grade']['grade']."' ,
         grading_id = $grading_id  ";
         $result1 = mysql_query($query1);
            echo mysql_error();
}

你可以这样做

 function traversearray($array)
{
    foreach($array as $key=>$value)
    {
        if(is_array($value))
        {
            traversearray($value);
        }
        else
        {
            echo "key = $key value = $value<br/>";
       }
    }
}
traversearray($competency);

您可以使用递归函数或array_walk_recursive或迭代器尝试以下代码进行手动遍历

<?php
function array_traverse($competency){
    foreach($competency as $key => $val){
        if(is_array($val)){
            array_traverse($val);
        } else{
            echo $val;
        }
    }
}
?>
fun($competency);
function fun($value)
{
  foreach ($value as $val)
  {
     if( is_array($val))
       fun($val);
     echo $val;
  }
}

试试这个.....!