简体   繁体   English

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

[英]how to traverse array of array(inner array) through for each

i have the following array 我有以下数组

$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
            )
        )
    )
);

i print this as 我将此打印为

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

this line give result as 这行给出结果为

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
                        )

                )

        )

   )

Now i try to insert data in two table in first table i use the key assessment_id,activity_id,grade based on that it return inserted id,and use this inserted id in second table as the below code here 现在,我尝试在第一个表的两个表中插入数据,我根据返回的插入ID使用键Assessment_id,activity_id,grade,并在第二个表中使用此插入的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>";
          }
      }
    }
}

but i am unable to find the solution plz help me 但我找不到解决方案,请帮我

Regards 问候

****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();

              }
            }
      }

You dont need second loop remove it and replace 您不需要第二个循环将其删除并替换

$innervalue['assessment_id']

with: 与:

$value['assessment_id']

Your complete code may look like: 您的完整代码可能如下所示:

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();
}

You can do like 你可以喜欢

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

You can use recursive function or array_walk_recursive or iterators Try below code for manual traverse 您可以使用递归函数或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;
  }
}

Try this.....! 尝试这个.....!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM