2012-12-04 59 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 
     } 
    } 
}