与foreach和多维数组混淆 - PHP

时间:2012-04-09 22:35:30

标签: php foreach

好的,阵列是我的弱点,我正在努力解决这个问题。它可能也很简单。基本上,我有一个

的数组

代码:

    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
                            )

                    )

            )

    )

    )

我正在使用foreach来调用数组 PHP代码:

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 />';
        }    
     }
} 

现在它似乎通过了getalbum数组,然后是getcover。我该怎么做才能将它们合并在一起呢?

2 个答案:

答案 0 :(得分:0)

如何获取数据,某种数据库?也许你可以在获取数据时合并它?

无论如何,如果您的数据总是以这种方式排序(匹配数组,第一部分数据,第二部分数据),那么这样的事情呢?

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 />';
    }    
 }

答案 1 :(得分:0)

您似乎正在尝试迭代查询(getalbumgetcover)。相反,您可能希望迭代相册并将封面和专辑数据视为统一的内容。我会尝试重构数据以便更容易使用:

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
}

请注意,这假设没有冲突的密钥(示例数据中没有),还有很多其他方法可以执行此操作。