比较php中单个元素上的两个数组


Compare 2 arrays on single element in php

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

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

谢谢你的帮助!

您正在寻找的是功能array_uintersect:

$result = array_uintersect($arr, $anotherarr, function($a, $b) { return strcmp($a['locName'], $b['locName']); });

如果每个locName将只出现一次,那么我建议您以

形式将您的数组转换为关联数组
Array
(
   [Johns House] => Array
    (
        [comName] => John
        [locID] => L152145
        [locName] => Johns House
     )
)

这样,您就可以使用array_keys访问每个位置名称,并且可以在两个array_keys上使用简单的array_intersect选择两个数组中存在的位置。

最简单的方法是遍历原始数组填充一个新数组(如果计划管理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.