我有一个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 = ' <i style="color: #28B463;">Movie Exists in json file</i>';
} else {
$exists = ' <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'的值,这也区分了我拥有的电影和我想拥有的电影。
我希望这是有道理的
答案 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 = ' <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 = ' <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。
我不确定你想要达到的目标,是你在寻找什么?