0

次のような 2 つの配列があり、さらに多くの結果が得られます。

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

各 locName が一度しか表示されない場合は、配列を次の形式の連想配列に変換することをお勧めします

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

     )
)

このようにして、 を使用してすべての場所の名前にアクセスでき、単純なon botharray_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 に答える