在数组上循环并获取不同的ID

时间:2019-11-24 作者:Dennis

我在参加过的所有演唱会上都做了一个循环,有些演唱会有相同的歌曲。

下面是该数组的结果:http://snippi.com/s/k80v7pe

现在,我想拥有一个包含所有不同歌曲id的数组。因此,我想查看我听过的所有歌曲:

//get the songs field get_field(\'songs\')
foreach ($postIds as $postId){ 
    array_push($songIds, get_field(\'songs\', $postId));  
} 

//Over here I\'m trying to print all the ID\'s of the song
foreach ($songIds as $songId) {
    echo $songId->ID;
}
但我得到以下错误:

注意:正在尝试获取中非对象的属性“ID”

就是因为这个数组$songIds 数组中是否有数组?

2 个回复
SO网友:cjbj

不,那是因为你在治疗array 作为objectPHP 不会自动转换这些类型。要从使用的对象中获取单个元素,请执行以下操作:

$my_object->Element1;
要从使用的数组中获取单个元素,请执行以下操作:

$my_array[Element1];
甚至可以嵌套数组。因此,如果您有$my\\u数组,其中每个元素都是另一个数组,那么您可以从arrayY获得elementX,如下所示:

$my_array[arrayY][elementX];
显然,在您的例子中,您有一个数组,其中包含一个数组,其中包含对象,总计为:

$my_array[arrayY][elementX]->componentZ

SO网友:Dennis

因为$songIds 是一个数组中的一个数组,我必须在每个数组中做2个循环。

下面的代码将来自不同数组的所有post id推送到一个新数组中$allSongs.

这样,我就有了一个包含所有id的数组。有些id将是重复的,因为有些歌曲在所有演唱会上播放超过1次。

foreach ($songIds as $songId) {
    foreach ($songId as $key => $value) {
        array_push($allSongs, $value->ID);
    }
}

//all songs
print_r($allSongs);
要仅检索唯一id,可以使用array函数array_unique 从阵列中删除重复项。

$uniqueSongs = array_unique($allSongs, SORT_REGULAR);
print_r($uniqueSongs);