我可以访问数组中的项目而无需额外的循环吗

时间:2013-09-12 14:32:52

标签: php arrays

我有这样的数据结构:

    array (size=4)  
  'active' => 
    array (size=1)
     170 => 
    object(stdClass)[2847]
      public 'item' => string '170' (length=3)
  'complete' => 
    array (size=1)
     8 => 
      object(stdClass)[2849]
       public 'item' => string '8' (length=1)
  'dropped' => 
    array (size=1)
     10 => 
     object(stdClass)[2850]
       public 'item' => string '10' (length=2)
  'total' => 
    array (size=1)
     188 => 
     object(stdClass)[2851]
       public 'item' => string '188' (length=3)

我正在使用此循环来迭代数据结构并访问item中的值。

        foreach($ecounts as $key => $value){

        if($key == 'total'){
            foreach($value as $i){
                $te = $i->item; 
            }
        }elseif($key == 'active'){
            foreach($value as $i){
                $ae = $i->item; 
            }
        }elseif($key == 'dropped'){
            foreach($value as $i){
                $de = $i->item; 
            }
        }elseif($key == 'complete'){
            foreach($value as $i){
                $ce = $i->item; 
            }
        }
    }

我确信有一种更智能的方式来访问项目值。每个if语句中的额外foreach()循环看起来有点过分,但我找不到更好的方法来完成。

感谢您的见解。

1 个答案:

答案 0 :(得分:1)

也许你可以在开始附加循环之前决定变量的名称。

    foreach($ecounts as $key => $value){

        $var = ($key == 'total' ? 'te' : $key == 'active' : 'ae' ? $key ==  'dropped' : 'de' ? $key == 'complete' : 'ce');

        foreach($value as $i){
            ${$var} = $i->item; 
        }
}

阅读http://php.net/manual/en/language.variables.variable.php了解更多文档。