2012-12-04 24 views
21

Ho una matrice di oggetti. Un print_r uscita è simile al seguente:PHP Foreach Array e oggetti

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

     ) 
) 

Io sono veramente fatica a trovare un modo per ciclo anche se i risultati e accedere agli elementi oggetto. Se qualcuno potesse darmi qualche suggerimento sarei estremamente grato.

Grazie in anticipo

risposta

30

Usa

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

O

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

Nota che la chiave '$ =>' parte non è necessaria –

+1

@ExplosionPills Sì, acconsenti allo – GBD

+0

Ma si consiglia di includere la parte '$ key =>'. Secondo questo benchmark, il loop è due volte più veloce, quando si include * la parte $ key: http://www.phpbench.com/ – Philipp

1

Assumendo che il sm_id e c_id proprietà sono pubblici, potervi accedere utilizzando un foreach sulla matrice:

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

grazie a tutti ... ancora una volta lo stackoverflow mi ha salvato la sanità mentale – AttikAttak

5

Looping oltre array e gli oggetti è un compito piuttosto comune, ed è bene che hai intenzione di imparare come farlo. In linea generale si può fare un foreach loop quali cicli sopra ogni membro, l'assegnazione di un nuovo nome temporaneo, e quindi consente di gestire quel particolare utente tramite quel nome:

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

In questo esempio ciascuno dei nostri valori nella $arr sarà accedere in ordine come $item. Quindi possiamo stampare i nostri valori direttamente da quello. Potremmo anche includere l'indice se volevamo:

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

oggetto traverse ricorsiva o un array con array o oggetti elementi:

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