2012-12-04 11 views
21

Mam tablicę obiektów. print_r wyjście wygląda następująco:Tablice i obiekty Foreach PHP

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

     ) 
) 

ja naprawdę stara się znaleźć sposób na pętli chociaż wyniki i dostęp do elementów obiektu. Jeśli ktokolwiek mógłby mi podać jakieś wskazówki, byłbym niezmiernie wdzięczny.

góry dzięki

Odpowiedz

30

Zastosowanie

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

LUB

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

Zauważ, że '$ key =>' część nie jest potrzebne –

+1

@ExplosionPills Tak, zgadzam się – GBD

+0

Zaleca się jednak włączenie części '$ key =>'. Zgodnie z tym punktem odniesienia, pętla jest dwa razy szybsza, gdy * dołączasz * część klucza $: http://www.phpbench.com/ – Philipp

1

Zakładając sm_id i c_id właściwości są jawne, można z nich korzystać za pomocą foreach na tablicy:

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

dziękuję wszystkim ... po raz kolejny stackoverflow uratował moje zdrowie psychiczne – AttikAttak

5

Pętle nad tablicami i obiektami to dość powszechne zadanie i dobrze, że chcesz się tego nauczyć. Ogólnie rzecz biorąc można zrobić foreach loop cykli, które w ciągu każdego członka, przypisując jej nową nazwę tymczasowego, a następnie umożliwia obsługę danego państwa za pośrednictwem tej nazwie:

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

W tym przykładzie każdy z naszych wartości w $arr będzie być dostępnym w kolejności jako $item. Możemy więc drukować nasze wartości bezpośrednio z tego. Mogliśmy także indeks jeśli chcieliśmy:

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

Recursive obiekt trawers lub tablicy z tablicy lub obiektów elementy:

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