【问题标题】:What's the error in my foreach loop over multidimensional array?我的 foreach 循环在多维数组上的错误是什么?
【发布时间】:2013-05-08 09:05:47
【问题描述】:

下面是我的多维数组$prev_map_data

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']);
        }
    }
}

【问题讨论】:

  • 这意味着您认为数组实际上不是数组。
  • 请格式化您的代码并添加行号
  • @deceze:感谢您的建议。我已经给出了我现有的多维数组供您参考。看到你能纠正我的代码吗?

标签: php arrays multidimensional-array associative-array


【解决方案1】:

您正在无条件地挖掘本身不是数组的项目的数组。改为这样做:

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

【讨论】:

  • 你的把戏对我有用。谢谢你。当我尝试以同样的方式获取 [class_id] 时,它再次给了我同样的警告。你能告诉我这次我的代码有什么问题吗?我的代码是 foreach($prev_map_data as $map_id) { $cls_data[] = $map_id['class_id']; }
  • @phpLover:不知道。如果它给了你同样的警告并且你提到的唯一的foreach,唯一的解释是$prev_map_data不是一个数组。但这没有意义,至少在现有信息的情况下。
  • 对不起乔恩这是我犯的一些语法错误,所以它给出了警告。进行更正后,它对我来说真的很好。感谢您的宝贵帮助。
【解决方案2】:

使用这个

$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++;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    相关资源
    最近更新 更多