【问题标题】:'Searching' through JSON with PHP使用 PHP 通过 JSON 进行“搜索”
【发布时间】:2015-04-24 11:14:13
【问题描述】:

这里我展示了一个我目前正在使用的示例,它正在工作但效率不够。几天来,我一直在努力寻找有效的替代方案,但我缺乏知识。

我有 2 个 JSON 文件,它们共享相同的键,但值会发生变化。

$file_data = file_get_contents('./data_1.json');
$json_data_1 = json_decode($file_data, true);
$file_data = file_get_contents('./data_2.json');
$json_data_2 = json_decode($file_data, true);

foreach($json_data_1["items"] as $key_1=>$val_1){
 foreach($json_data_2["items"] as $key_2=>$val_2){
  if ($val_1['guy'] == $val_2['guy']) {

        echo "Match Found!";
        // here I check for any differences
        // in other values
        break(1);

    }
  }
}

【问题讨论】:

  • 请详细说明您要达到的目标是什么?只是在寻找第一个共享值?
  • 是的,“Guy”下有一个值,在我试图找到匹配项的两个 JSON 文件中该值相同。以上方法有效,只是效果不佳。
  • 看看我的回答,如果你迷路了,请告诉我,并进行相应的编辑;)
  • 要给他们俩一个机会!将分享我的结果。谢谢大家!
  • 谢谢大家,非常感谢您的帮助。但是我对这两种方法都有疑问,它们都可以工作,但我也不需要它们。现在它们都可以工作,但前提是两个 JSON 文件的顺序相同,但我的文件略有变化,有时包含新条目,但格式与其他文件相同。

标签: php json search compare


【解决方案1】:
$file_data = file_get_contents('./data_1.json');
$json_data_1 = json_decode($file_data, true);
$file_data = file_get_contents('./data_2.json');
$json_data_2 = json_decode($file_data, true);

 print_r(array_diff($json_data_1["items"],$json_data_2["items"]);

https://php.net/manual/en/function.array-diff.php

【讨论】:

  • 谢谢罗伯特,我无法得到任何结果,但如果数据的顺序不同,这也会出现与以下相同的问题,(格式保持不变)
【解决方案2】:

由于它使用相同的密钥,您只需要使用一个 foreach 循环并使用密钥。

试试这个代码:

$file_data = file_get_contents('./data_1.json');
$json_data_1 = json_decode($file_data, true);
$file_data = file_get_contents('./data_2.json');
$json_data_2 = json_decode($file_data, true);

foreach($json_data_1["items"] as $key_1=>$val_1){
  if ($val_1['guy'] == $json_data_2['items'][$key_1]['guy']) {

        echo "Match Found!";
        // here I check for any differences
        // in other values
        break(1);

    }
  }
}

【讨论】:

  • 所以这看起来很棒,并且可以完美运行,但是我的 data_2.json 每次都没有以相同的顺序输入。我该怎么办?
  • 如果它使用名称键而不是数字键,它应该仍然有效。
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多