PHP搜索数组返回所有值
我有一个json文件,数据如下:PHP搜索数组返回所有值,php,arrays,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 } ] 我正
[
{
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_解码将其转换为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;
}
}
//从TMBD API中提取json数据
$ch=curl_init();
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_URL,$apirl);
$result=curl\u exec($ch);
卷曲关闭($ch);
$obj=json_decode($result,true);
$json=file_get_contents('PHP/results.json');
$cMov=json_decode($json,true);
$i=1;
foreach($obj['results']作为$data){
//在$cMov中搜索$data['id']。这里我想显示'dl'是真还是假
if(数组搜索($data['id'],数组列($cMov,'tmdbid')){
$exists='电影存在于json文件中';
}否则{
$exists='电影不在json文件中';
}
如果($data[“原始语言”]=“en”){
//显示电影海报等。存在echo$
如果(++$i>=$limit)中断;
}
}
目前,该代码将显示我的json库中是否存在该ID。然而,我想返回'dl'的值,这也是我拥有的电影和我想要拥有的电影之间的区别
我希望这是有意义的如果您有一个带有obj的数组,只需循环遍历它并检查“dl”是否为真:
// $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
}
}
现在,当'dl'为真时,您可以仅使用值重建新数组,您可以添加一个新条件,如if($obj['id']==“您想要的id”)
等
如果要在数组中查找具有特定“id”和“dl”true的值,可以使用array\u filter()
我不确定您到底想要实现什么,这是您想要的吗?最短的方法是使用array\u 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;
}
}
$data=json\u decode($cMovJSON,true);
$cMov=array_column($data,“dl”,“id”);
foreach($obj['results']作为$data){
//在$cMov中搜索$data['id']。这里我想显示'dl'是真还是假
如果(isset($cMov[$data['id']])){
$exists='电影存在于json文件中';
如果($cMov[$data['id']])){
$exists.=“True”;//exists和True
}
否则{
$exists.=“False”;//存在但为False
}
}否则{
$exists='电影不在json文件中';
}
如果($data[“原始语言”]=“en”){
//显示电影海报等。存在echo$
如果(++$i>=$limit)中断;
}
}
希望你能看到一些地方,在这些地方你可以把你需要的任何逻辑放到这段代码中。我已经用更多信息更新了我的原始问题。谢谢你的帮助。我想我已经用你的after.Perfect更新了答案。谢谢你的帮助我已经用更多信息更新了我的原始问题。谢谢你的帮助