PHP按值搜索数组中的所有条目

时间:2017-12-20 18:31:44

标签: php arrays multidimensional-array find

因此,就像一个小时一样,我正在努力解决这个问题...... 我正在使用MusicBrainz api,结果我正在尝试检索艺术家ColdPlay的所有版本(Becouse他在不同的国家有几个版本)。

我想做的是:

•搜索MusicBrainz响应数组以获得重复的歌曲标题。

•对于每个重复项,找到发布日期的国家

所以响应看起来像这样:

{
   "title": "Parachutes",
   "releaseDates": {
        "UK": "2010-10-10",
        "USA": "2010-10-12",
        "AU": "2010-10-20",
        "XW": "2010-11-11",
   }

}

而不是:https://hastebin.com/fejazububi.php

我尝试过使用array_filter,foreach等。没有运气。 你们有人有这方面的建议吗?谢谢!

解决:

生成的回复:https://hastebin.com/ubiqasugav.php 代码:

        $Data = [];
        $ReleasesData = $ArtistData->releases['releases'];
        foreach ($ReleasesData as $rel) {
            if(!isset($Data[$rel['title']]['releaseDates'][$rel['country']])) {
                $Data[$rel['title']]['releaseDates'][$rel['country']] = [
                    'date' => $rel['date'],
                    'status' => $rel['status']
                ];
            }
        }

        return print_r($Data);

1 个答案:

答案 0 :(得分:0)

通过循环,简单的代码是:

$titles = array_unique(array_column($myarray, 'title'));
$result = array();
foreach ($titles as $title) {
    $releaseDates = array();
    foreach ($myarray as $event) {
        if ($event['title'] == $title) {
            $releaseDates[$event['country']] = $event['date'];
        }
    }
    $data['title'] = $title;
    $data['releaseDates'] = $releaseDates;
    $result[] = $data;
}