在php中循环遍历三维数组

时间:2014-03-17 07:43:22

标签: php arrays loops multidimensional-array

我有一个如下所示的数组:

Array
 (
[0] => Array
    (
        [id] => 39
        [nume] => Ardeleanu
        [prenume] => Bogdan
        [crm] => Array
            (
            )

    )


[1] => Array
    (
        [id] => 40
        [nume] => Avram
        [prenume] => Corina
        [crm] => Array
            (
                [2014-02-27] => 2
                [2014-02-28] => 1
            )

    )
)

这是我的代码:

foreach ($newOrders as $crm) {
   foreach ($crm as $angajati) {
      foreach ($angajati['crm'] as $val) {
        echo $val;
      }
   }
}

我收到了警告:

  

非法字符串偏移'crm'。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您正在尝试遍历整个第二级数组,但只有crm个关键点指向数组。因此,您需要这样做:

foreach ($newOrders as $crm) 
{
   if(isset($crm['crm']))
   {
     foreach ($crm['crm'] as $val) 
     {
          echo $val;
     }
   }
}

- 如果您想在crm键中获取值。它可能不存在,因此,我添加了isset检查。

答案 1 :(得分:2)

有帮助吗?

foreach ($newOrders as $key=>$val) {
 if(array_key_exists("crm",$val) && count($val["crm"]) > 0 ){
   foreach($val["crm"] as $k=>$v){
     echo $k." = ".$v."<br />";
   }
 }
}

当我们遍历一个多维数组时,如果相应的值又是数组,那么最好检查键是否可用,并在执行循环之前检查值数组是否有一些元素。

所以这里首先检查“crm”是否可用以及该值是否也是一个数组在执行循环之前有一些元素并且由行完成

if(array_key_exists("crm",$val) && count($val["crm"]) > 0 ){

这样做是为了避免在foreach中提供的无效索引和无效参数进一步注意,如果元素丢失或数据数组不存在。