PHP搜索数组返回所有值

时间:2018-02-19 17:05:48

标签: php arrays

我有一个json文件,其数据如下:

[
  {
    id: 40807,
    dl: true
  },
  {
    id: 347984,
    dl: true
  },
  {
    id: 431530,
    dl: true
  },
  {
    id: 75674,
    dl: true
  },
  {
    id: 262504,
    dl: true
  },
  {
    id: 415842,
    dl: false
  }
]

我正在使用json_decode将其转换为PHP。

我想在数组中搜索id并返回dl是true还是false,但是无法解决如何使用PHP执行此操作。

有人能指出我正确的方向吗?

编辑:

我专门从API(电影数据库)中提取数据。 API会返回六部电影,其中包含传记,发布日期,ID等数据。

上面的我的json文件将包含我在我的收藏中的电影列表(我可能会合法拥有)。

我正在使用foreach循环来显示API中的电影。在其中,我想搜索从我的json文件中拉出的数组,以显示该电影是否在我的收藏中。

我有以下内容:

//pull json data from TMBD API
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$APIurl);
$result=curl_exec($ch);
curl_close($ch);

$obj = json_decode($result, true);


$json = file_get_contents('PHP/results.json');
$cMov = json_decode($json,true);


$i=1;
foreach($obj['results'] as $data) {

    //search $cMov for $data['id']. Here I want to show whether 'dl' is true or false
    if(array_search($data['id'], array_column($cMov, 'tmdbid'))) {
        $exists = '&nbsp; <i style="color: #28B463;">Movie Exists in json file</i>';
    } else {
        $exists = '&nbsp; <i style="color: #CB4335;">Movie not in json file</i>';
    }

if($data["original_language"] == 'en') {

    //display movie poster, etc. echo $exists

    if(++$i >= $limit) break;
}


}

目前,该代码将显示我的json库中是否存在该ID。但是,我想要返回'dl'的值,这也区分了我拥有的电影和我想拥有的电影。

我希望这是有道理的

2 个答案:

答案 0 :(得分:2)

最短的方法是使用array_column()使用允许您为结果设置关键字的选项...

$data = json_decode($json, true);
$out = array_column($data, "dl", "id");
echo $out[347984];

修改

我已经用额外的位更新了代码......

$data = json_decode($cMovJSON, true);
$cMov = array_column($data, "dl", "id");

foreach($obj['results'] as $data) {

    //search $cMov for $data['id']. Here I want to show whether 'dl' is true or false
    if(isset($cMov[$data['id']])) {
        $exists = '&nbsp; <i style="color: #28B463;">Movie Exists in json file</i>';
        if ( $cMov[$data['id']] )   {
            $exists.="True";  // Exists and true
        }
        else    {
            $exists.="False";// Exists but false
        }
    } else {
        $exists = '&nbsp; <i style="color: #CB4335;">Movie not in json file</i>';
    }

    if($data["original_language"] == 'en') {

        //display movie poster, etc. echo $exists

        if(++$i >= $limit) break;
    }

}

希望您能看到可以将所需逻辑放入此代码的位。

答案 1 :(得分:0)

你有一个带obj的数组,只需循环遍历它并检查是否&#34; dl&#34;是真还是假:

// $array is your array as your wrote it
foreach ($array as $obj) {
  // $obj here is the "little" array you have with "id" and "dl"
  if ($obj['dl'] == true) {
    echo $obj; // eg. [id : xxx, dl : true]
    echo $obj['id']; // eg. xxx
  }
}

现在,您可以重新构建一个仅包含值的新数组,并且&#39; dl&#39;是的,您可以添加if ($obj['id'] == "THE ID YOU WANT")等新条件

如果你想在数组中找到一个特定的&#34; id&#34;和&#34; dl&#34;是的,你可以使用array_filter()我认为,这里是documentation

我不确定你想要达到的目标,是你在寻找什么?