2012-04-09 20 views
0

Ok, so Arrays sind meine Schwäche und ich habe damit zu kämpfen. Es ist wahrscheinlich auch tot einfach. Im Grunde habe ich ein Array, das istVerwirrt mit foreach und multidimensionalen Array - PHP

Code:

Array 
    (
[data] => Array 
    (
     [0] => Array 
      (
       [name] => getalbum 
       [fql_result_set] => Array 
        (
         [0] => Array 
          (
           [aid] => 187046464639937_101906 
           [name] => photo tab 
           [cover_pid] => 187046464639937_1661168 
          ) 

         [1] => Array 
          (
           [aid] => 187046464639937_99627 
           [name] => Cover Photos 
           [cover_pid] => 187046464639937_1661054 
          ) 

        ) 

      ) 

     [1] => Array 
      (
       [name] => getcover 
       [fql_result_set] => Array 
        (
         [0] => Array 
          (
           [src] => http://photos-g.ak.fbcdn.net/hphotos-ak-prn1/526499_403098366368078_187046464639937_1661168_217706037_s.jpg 
          ) 

         [1] => Array 
          (
           [src] => http://photos-b.ak.fbcdn.net/hphotos-ak-ash3/562470_403049039706344_187046464639937_1661054_361917190_s.jpg 
          ) 

        ) 

      ) 

    ) 

    ) 

Ich verwende ein foreach das Array aufrufen, indem Sie PHP-Code:

foreach($fql_query_obj['data'] as $albums){ 
    foreach($albums['fql_result_set'] as $album){ 
     //print_r($album); 
     if ( ($album['name'] != "Wall Photos") 
      && ($album['name'] != "Cover Photos") 
      && ($album['name'] != "photo tab")) 
     { 
      echo $album['name'].' :: '.$album['aid']; 
      echo '<img src="'.$album['src'].'" /><br />'; 
     }  
    } 
} 

Jetzt ist es zu gehen scheint durch das getalbum-array dann das getcover. Wie kann ich es so machen, dass es beide zusammen verbindet?

+2

Können Sie ein Beispiel für die Ausgabe bereitstellen, die Sie erwarten? Ihre Frage ist am Ende unklar. Was meinst du mit "verbindet beide zusammen"? –

Antwort

0

Wie bekommen Sie Ihre Daten, irgendeine Art von Datenbank? Vielleicht können Sie es zusammenführen, wenn Sie diese Daten abrufen?

Wie auch immer, wenn Ihre Daten immer so geordnet sind (passende Arrays, eins mit dem ersten Teil der Daten, zweites mit zusätzlichen) wie wäre es mit so etwas?

foreach($fql_query_obj['data'][0]['fql_result_set'] as $key_album => $album){ 
    //print_r($album); 
    if ( ($album['name'] != "Wall Photos") 
     && ($album['name'] != "Cover Photos") 
     && ($album['name'] != "photo tab")) 
    { 
     echo $album['name'].' :: '.$album['aid']; 
     echo '<img src="'.$fql_query_obj['data'][1]['fql_result_set'][$key_album]['src'].'" /><br />'; 
    }  
} 
+0

Danke, das ist fast genauso, wie ich herausgefunden habe, nachdem ich die Frage gepostet habe. –

0

Es scheint, wie Sie versuchen, die Abfragen (getalbum und getcover) iterieren. Stattdessen möchten Sie wahrscheinlich die Alben iterieren und die Cover- und Albumdaten als eine Einheit behandeln. Ich würde versuchen, die Daten Umstrukturierung leichter sein, mit zu arbeiten:

list($albumsQuery, $coversQuery) = $fql_query_obj['data']; 
$albums = array(); 

foreach ($albumsQuery['fql_result_set'] as $album) { 
    $albums[] = $album; 
} 

for ($i = 0, $numAlbums = count($albums); $i < $numAlbums; ++$i) { 
    $albums[$i] = array_merge($albums[$i], $coversQuery['fql_result_set'][$i]); 
} 

foreach ($albums as $album) { 
    // Here, $album contains data from both arrays 
} 

Beachten Sie, dass dies setzt voraus, es gibt keine widersprüchlichen Tasten (es gibt nicht in Ihrem Beispiel Daten), und es gibt viele andere Möglichkeiten, dies zu tun .