PHP foreach数组中的子数组

时间:2013-01-24 04:02:14

标签: php zend-framework

我正在尝试解析一个看起来像这样的数组:

array(1) {
  ["StrategischeDoelstellingenPerDepartement"] => array(412) {
    [0] => array(5) {
      ["CodeDepartement"] => string(8) "DEPBRAND"
      ["NummerHoofdstrategischeDoelstelling"] => string(1) "1"
      ["Nummer"] => string(2) "27"
      ["Titel"] => string(22) "DSD 01 - HULPVERLENING"
      ["IdBudgetronde"] => string(1) "2"
    }
    [1] => array(5) {
      ["CodeDepartement"] => string(8) "DEPBRAND"
      ["NummerHoofdstrategischeDoelstelling"] => string(1) "2"
      ["Nummer"] => string(2) "28"
      ["Titel"] => string(24) "DSD 02 - Dienstverlening"
      ["IdBudgetronde"] => string(1) "2"
    }
    [2] => array(5) {
      ["CodeDepartement"] => string(8) "DEPBRAND"
      ["NummerHoofdstrategischeDoelstelling"] => string(1) "2"
      ["Nummer"] => string(2) "29"
      ["Titel"] => string(16) "DSD 03 - KLANTEN"
      ["IdBudgetronde"] => string(1) "2"
    }
    ...

(阵列继续,但它太大了,无法在此完整发布)

我可以像这样在数组上执行foreach循环:

foreach($my_arr->StrategischeDoelstellingenPerDepartement as $row){
    echo "i found one <br>";
}

但是,我想在其他数组上做同样的事情,我想让函数通用。第一个关键(在这种情况下为StrategischeDoelstellingenPerDepartement)有时会发生变化,这就是为什么我要一般性地这样做。我已经尝试了以下内容:

foreach($my_arr[0] as $row){
    echo "i found one <br>";
}

但后来我收到以下通知,没有数据:

Notice: Undefined offset: 0 in C:\Users\Thomas\Documents\GitHub\Backstage\application\controllers\AdminController.php on line 29

这可能是一个愚蠢的问题,但我是PHP的新手,这似乎是正确的方法。显然,事实并非如此。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:2)

使用reset在不知道密钥名称的情况下抓取$my_arr的第一个元素:

$a = reset($my_arr);
foreach($a as $row){
    echo "i found one <br>";
}

答案 1 :(得分:0)

您尝试做的是对象,而不是数组$my_arr->StrategischeDoelstellingenPerDepartement。 您可以使用isset()检查索引是否存在:

if(isset($my_arr['StrategischeDoelstellingenPerDepartement'])){
    foreach($my_arr['StrategischeDoelstellingenPerDepartement'] as $row){
        echo "i found one <br>";
    }
}

或者,您可以使用array_values()忽略数组键并使其成为索引数组:

$my_new_arr = array_values($my_arr);
foreach($my_new_arr as $row){
    echo "i found one <br>";
}   

答案 2 :(得分:0)

将子阵列从主阵列移开并在其上循环:

$sub = array_shift($my_arr);
foreach ($sub as $row) {
    echo $row['Titel'], "<br>";
}

答案 3 :(得分:0)

使用current参考:http://in3.php.net/manual/en/function.current.php

$a = current($my_arr);
foreach($a as $row){
    echo "i found one <br>";
}