2013-05-08 81 views
0

以下是我的多维数组命名$prev_map_data在我的多维数组的foreach循环中出现什么错误?

Array 
(
    [0] => Array 
     (
      [class_id] => 2 
      [class_name] => II 
      [class_checked] => 1 
      [class_subjects] => Array 
       (
        [0] => Array 
         (
          [cs_map_id] => 81 
          [subject_name] => 11 Engllish 
          [subject_checked] => 1 
          [teacher_cs_id] => 81 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [class_id] => 3 
      [class_name] => III 
      [class_checked] => 1 
      [class_subjects] => Array 
       (
        [0] => Array 
         (
          [cs_map_id] => 155 
          [subject_name] => Hidi 
          [subject_checked] => 1 
          [teacher_cs_id] => 155 
         ) 

        [1] => Array 
         (
          [cs_map_id] => 156 
          [subject_name] => 11 Maths 
          [subject_checked] => 1 
          [teacher_cs_id] => 156 
         ) 

        [2] => Array 
         (
          [cs_map_id] => 157 
          [subject_name] => 11 Science 
          [subject_checked] => 1 
          [teacher_cs_id] => 157 
         ) 

       ) 

     ) 

) 

我想一个摆脱关键[cs_map_id]一个所有的值和数组$data推值。但得到警告

Warning: Invalid argument supplied for foreach() 

我不明白我的代码有什么问题。任何人都可以帮助我改进我的代码并将值附加到新数组中吗?提前致谢。我的代码如下:

$prev_map_data = $objTeacherClassesSubjects->GetClassSubjectMappingsbyTeacherId ($request, $teacher_class_subjects_error_messages); 
//print_d($prev_map_data); 
$data = array(); 
foreach($prev_map_data as $map_id){ 
    foreach($map_id as $ast){ 
     foreach($ast as $tp){ 
      //print_p($tp); 
      $tp['cs_map_id']; 
      array_push($data,$tp['cs_map_id']); 
     } 
    } 
} 
+1

这意味着你认为的其中一件事情是数组实际上不是数组。 – deceze 2013-05-08 09:07:07

+0

请格式化您的代码并添加行号 – gmaliar 2013-05-08 09:07:24

+0

@deceze:感谢您的建议。我已经给出了我现有的多维数组供您参考。看到这个,你能纠正我的代码吗? – PHPLover 2013-05-08 09:09:17

回答

2

你无条件地挖掘到阵列上本身不是数组的项目。取而代之:

foreach($prev_map_data as $map_id){ 
    foreach($map_id['class_subjects'] as $subject){ 
     $data[] = $subject['cs_map_id']; 
    } 
} 
+0

你的伎俩为我工作。感谢它。当我试图以同样的方式获得[class_id]时,它再次给了我同样的警告。你能告诉我这次用我的代码有什么问题吗?我的代码是 foreach($ prev_map_data as $ map_id){ $ cls_data [] = $ map_id ['class_id']; } – PHPLover 2013-05-08 10:05:43

+0

@phpLover:不知道。如果它给了你同样的警告,唯一的'foreach'就是你提到的那个,唯一的解释是'$ prev_map_data'不是一个数组。但这是没有道理的,至少有可用的信息。 – Jon 2013-05-08 11:38:37

+0

对不起乔恩,这是我的一些语法错误,所以它给了一个警告。纠正后,它对我来说真的很好。感谢您的宝贵帮助。 – PHPLover 2013-05-08 12:01:40

0

使用此

$arr = array(); 

foreach($prev_map_data as $map_id){ 
    $i = 0; 
    foreach($map_id['class_subjects'] as $val) { 

     $arr[$i] = $val['cs_map_id']; 
     $i++; 
    } 
}