2013-06-12 1 views
1

J'ai ce genre de tableau:PHP éviter la double foreach lors de la boucle dans un tableau d'un tableau

Array ([data] => Array ([0] => Array ([name] => Lskdjlkdsfj [start_time] => 2013-06-12 [timezone] => Europe/Rome [location] => Rome, Lazio [id] => 592087844156650 [rsvp_status] => attending)) [paging] => Array ([previous] => https://graph.facebook.com/100004042705860/events?limit=25&since=1370995200&__paging_token=592087844156650&__previous=1 [next] => https://graph.facebook.com/100004042705860/events?limit=25&until=1370995200&__paging_token=592087844156650)) 

Pour obtenir les données que je le fais:

foreach ($fb_events as $data) { 
    foreach ($data as $fb_event_data) { 
     echo $fb_event_data['name']; 
     echo $fb_event_data['start_time']; 
    } 
} 

Est-ce la meilleure façon pour le faire, en utilisant un double foreach? Y a-t-il un meilleur moyen de faire une boucle dans un tableau d'un tableau? Celui-ci fonctionne. Je me demande juste si je le fais de la "bonne" manière!

+0

Je fais la même chose ... –

+0

Absolument rien de mal avec les boucles à l'intérieur des boucles; c'est exactement comme ça que je le ferais. – jterry

Répondre

1

Si le tableau de niveau supérieur ne dispose que d'un seul élément, cela peut être simplifié comme

foreach ($fb_events["data"] as $fb_event_data) { 
    echo $fb_event_data['name']; 
    echo $fb_event_data['start_time']; 
} 
+1

que pas le point de la question – donald123

+0

Je fais la même chose chaque fois que c'est possible ... beaucoup plus clair et compréhensible. – Mahdi

+0

@ donald123 Basé sur le code et les données fournis, mon code est exactement ce que l'OP essaie d'effectuer. L'itération à travers les éléments de niveau supérieur va générer des tableaux qui n'ont pas de nom ou de clé start_time et qui donnent des indications d'index non définies – Orangepill

1

Les boucles imbriquées ne sont pas plus «correctes» ou «fausses» que les tableaux imbriqués. C'est-à-dire que cela dépend entièrement de vos données et de leur signification. Si vous vous retrouvez avec cinq niveaux de boucles imbriquées, vous pouvez reconsidérer la structure de votre code. Mais je ne pense pas qu'un niveau d'imbrication soit ipso facto un problème.

3

Bien qu'il n'y ait rien de mal à utiliser des boucles imbriquées. Dans certains cas, vous pourriez vouloir résoudre la boucle d'une manière plus élégante. Jetez un oeil à PHP RecursiveArrayIterator et RecursiveIteratorIterator classes pour cela.

$foo = array(
    'data' => array(
     'name' => 'Lskdjlkdsfj', 
     'start_time' => '2013-06-12', 
     'paging' => array(
      'previous' => 'some-url' 
     ) 
    ) 
); 

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($foo)); 

foreach ($it as $key => $val) { 
    echo $key . ":" . $val . "\n"; 
} 

name:Lskdjlkdsfj 
start_time:2013-06-12 
previous:some-url 
Questions connexes