2013-09-25 1 views
0

두 배열 배열을 비교하려면 array_intersect을 사용하려고합니다.array_intersect 배열에 하위 배열이있을 때 오류가 발생합니다

주의 사항 : 라인 XYZ

그리고 비교에 testfile.php에서 문자열 변환 배열이 실제로하지 않습니다

$start[]=array(
     'id'=>1, 
     'name'=>'Up', 
     'action'=>'up' 
); 
$start[]=array(
     'id'=>3, 
     'name'=>'Down', 
     'action'=>'down' 
); 
$start[]=array(
     'id'=>5, 
     'name'=>'Left', 
     'action'=>'left' 
); 




$end[]=array(
     'id'=>1, 
     'name'=>'Up', 
     'action'=>'up' 
); 
$end[]=array(
     'id'=>9, 
     'name'=>'Up', 
     'action'=>'up' 
); 

$result=array_intersect($start,$end); 

그러나, 나는 항상 통지 메시지가 나오다.

휠을 재발 명하거나 지나치게 복잡한 것에 도달하지 않고 두 배열을 비교하는 가장 좋은 방법은 무엇입니까?

답변

2

다른 사람이 array_map을 제안하고 serialize합니다. 결국 중첩 및 재귀보다 훨씬 쉽고 기본적으로 array_intersect 함수를 다시 작성하려는 시도에서 비참하게 실패합니다.

echo '<pre>'; 

$start[]=array(
     'id'=>1, 
     'name'=>'Up', 
     'action'=>'up' 
); 
$start[]=array(
     'id'=>3, 
     'name'=>'Down', 
     'action'=>'down' 
); 
$start[]=array(
     'id'=>5, 
     'name'=>'Left', 
     'action'=>'left' 
); 
$start[]=array(
     'id'=>2, 
     'name'=>'Left', 
     'action'=>'left' 
); 





$end[]=array(
     'name'=>'Up', 
     'id'=>1, 

     'action'=>'up' 
); 
$end[]=array(
     'id'=>8, 
     'name'=>'Right', 
     'action'=>'Right' 
); 




function serialize_array_values($arr){ 
    foreach($arr as $key=>$val){ 
     sort($val); 
     $arr[$key]=serialize($val); 
    } 

    return $arr; 
} 




$result = array_map("unserialize", array_intersect(serialize_array_values($start),serialize_array_values($end))); 

echo "\n\n\n"; 
echo var_dump($result); 


echo '</pre>'; 
3

array_diff 및 array_intersect는 기본 배열의 각 요소를 비교할 문자열로 변환합니다. 다른 비교를하고 싶은 경우에, 당신은 다음과 같은 내장 함수와 콜백 메소드를 사용할 수 있습니다

array_uintersect_assoc() - Computes the intersection of arrays with additional index check, compares data by a callback function 
array_intersect_uassoc() - Computes the intersection of arrays with additional index check, compares indexes by a callback function 
array_uintersect_uassoc() - Computes the intersection of arrays with additional index check, compares data and indexes by a callback functions 

나는 함수 array_diff에 대한 PHP.net를 검색하여 다음을 발견하고 관련 기능 링크를 따라 갔다. 그 일을위한 대안을 볼 수있는 좋은 방법.

+1

확인할 추가 색인이 없습니다. 이러한 기능 중 어느 것도 스스로 문제를 해결하지 못합니다. 나는 무엇을 다시 부를까요? –

+0

음, ** 항상 ** 2 차원 배열이면 다른 배열 비교 함수에 대한 콜백이 작동합니다. 또 다른 목적으로 만들어진 함수도 쓸 수 있습니다. 아이디어는 PHP가 반복 작업을 수행하고 주어진 상황에 의해 지시 된 compare 함수를 작성하는 것입니다. – SamA

+0

추가 색인을 제공 할 필요가 없습니다. 색인 검사가 수행해야 할지도 확실하지 않습니다. 어떤 비교 콜백 함수가 적절할 것입니까? –