2014-05-23 2 views
0

에 하나의 요소에 두 배열을 비교 :나는 더 많은 결과를 다음과 같이 두 개의 배열이 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을 반환!

답변

0

당신이 찾고있는 것은 기능 array_uintersect입니다 : 각 LOCNAME 한 번만 나타납니다

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

흠, 나는 이것에 대해 들어 본 적이 없어요. 음, 구현했습니다. 그러나 아직 결과가 없습니다. 수동으로 두 파일을 비교합니다. 몇 개의 일치 항목이 있습니다 ... 누락 된 부분이 있습니다. – user3614185

0

경우에, 나는 당신이 양식

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. 
+0

어떻게 될까요? 나는 그 변화를 만들려고 갈까? 깨끗한 해결책처럼 보이는데 배열과 함께 일하는 것이 정말 새롭다. 감사합니다 – user3614185

+0

편집을 참조하십시오. – amenadiel