0

我有两个看起来像这样的数组,结果更多:

Array
(
   [0] => Array
    (
        [comName] => John
        [locID] => L152145
        [locName] => Johns House

               )
)

我想做的是比较结果,但只在 locName 元素上进行比较……这是我目前正在使用的代码。

$searchcode = "a url to json results"; 
$simple = file_get_contents($searchcode);
$arr = json_decode($simple , true);

然后对每个 json 文件执行此操作

 $result = array_intersect($arr, $anotherarr);

理想情况下,这将从两个数组中返回匹配的 locNames

谢谢您的帮助!

4

2 回答 2

0

您正在寻找的是功能array_uintersect

$result = array_uintersect($arr, $anotherarr, function($a, $b) { return strcmp($a['locName'], $b['locName']); });
于 2014-05-23T21:15:57.540 回答
0

如果每个 locName 只会出现一次,那么我建议您将数组转换为表单中的关联数组

Array
(
   [Johns House] => Array
    (
        [comName] => John
        [locID] => L152145
        [locName] => Johns House

     )
)

这样,您将可以使用 访问每个位置名称array_keys,并且能够选择两个数组中都存在的位置,并在两者上使用简单array_intersectarray_keys.

最简单的方法是迭代原始数组填充一个新数组(如果您计划管理 10000 多个元素,效率不高,但在其他情况下可以忽略不计)

$assocA=array();
$assocB=array();

foreach($arr as $element) {
    $assocA[$element['locName']]=$element;
}

foreach($anotherarr as $anotherelement) {
    $assocB[$anotherelement['locName']]=$anotherelement;
}

$common_locations = array_intersect(array_keys($assocA), array_keys($assocB)); // will return all locnames present in both arrays.
于 2014-05-23T21:18:39.743 回答