2012-12-04 112 views
21

我有一个对象数组。 一个print_r输出如下:PHP Foreach数组和对象

Array 
(
    [0] => stdClass Object 
     (
      [sm_id] => 1 
      [c_id] => 1 
     ) 
    [1] => stdClass Object 
     (
      [sm_id] => 1 
      [c_id] => 2 

     ) 
) 

我真的在努力寻找一种方式来循环,虽然结果并访问对象的元素。 如果有人能给我任何指点,我会非常感激。

在此先感谢

回答

30

使用

//$arr should be array as you mentioned as below 
foreach($arr as $key=>$value){ 
    echo $value->sm_id; 
} 

OR

//$arr should be array as you mentioned as below 
foreach($arr as $value){ 
    echo $value->sm_id; 
} 
+6

注意'$键=>'不需要部分 –

+1

@ExplosionPills是的同意 – GBD

+0

但建议包含'$ key =>'部分。根据这个基准,循环是两倍的速度,当你*包括*关键部分:http://www.phpbench.com/ – Philipp

1

假设你sm_idc_id性质是公开的,你可以在阵列上使用foreach访问它们:

$array = array(/* objects in an array here */); 
foreach ($array as $obj) { 
    echo $obj->sm_id . '<br />' . $obj->c_id . '<br />'; 
} 
+0

谢谢大家...再次stackoverflow保存我的理智 – AttikAttak

5

循环访问数组和对象是一项非常普遍的任务,您最好学习如何去做。一般来说,你可以在每个成员做了foreach loop其周期,分配给它一个新的临时名称,然后让你通过这个名字办理特定成员:

foreach ($arr as $item) { 
    echo $item->sm_id; 
} 

在这个例子中我们每一个价值观的$arr会按$item的顺序访问。所以我们可以直接打印我们的值。我们也可以包括指数如果我们想:

foreach ($arr as $index => $item) { 
    echo "Item at index {$index} has sm_id value {$item->sm_id}"; 
} 
2

递归遍历的对象或数组与数组或对象的元素:

function traverse(&$objOrArray) 
{ 
    foreach ($objOrArray as $key => &$value) 
    { 
     if (is_array($value) || is_object($value)) 
     { 
      traverse($value); 
     } 
     else 
     { 
      // DO SOMETHING 
     } 
    } 
}