2017-10-26 9 views
0

未知のインデックスを持つ2つの配列の間で同じ値を得るには解決策が必要です。私は第一と第二の配列の共通の値が含まれている3番目の配列を取得したいと思い2次元の多次元配列を比較して共通の値を取得するPHP

Array(
[0] => Array 
    (
     [field_name] => Beauty - Care 
     [zonegeo] => Angola 
    ) 

[1] => Array 
    (
     [field_name] => Beauty - Care 
     [zonegeo] => Swaziland 
    ) 
) 

:たとえば

ここで第一配列$a

Array(
[0] => Array 
    (
     [field_name] => Aerospace 
     [zonegeo] => Angola 
    ) 

[1] => Array 
    (
     [field_name] => Aerospace 
     [zonegeo] => Cameroon 
    ) 

[2] => Array 
    (
     [field_name] => Aerospace 
     [zonegeo] => Congo 
    ) 

[3] => Array 
    (
     [field_name] => Beauty - Care 
     [zonegeo] => Angola 
    ) 

[4] => Array 
    (
     [field_name] => Beauty - Care 
     [zonegeo] => Cameroon 
    ) 

[5] => Array 
    (
     [field_name] => Beauty - Care 
     [zonegeo] => Swaziland 
    ) 
) 

第二の配列$b

同じ値が、私はarray_intersect($a, $b)を試みたが、それは動作しません

 1.[field_name] => Beauty - Care [zonegeo] => Angola 
    2.[field_name] => Beauty - Care [zonegeo] => Swaziland 

です。

+2

をあなたは、このいずれかを確認しましたhttps://stackoverflow.com/questions/5653241/using-array-intersect-on-a-multi-dimensional-array –

+0

はい、私はそれを見た:エラーがあります:array_uintersect()は有効なコールバック、関数 'compareDeepValue'が見つかりませんまたは無効な関数名[...]を期待します。 – yuhell

答えて

0

array_intersectは文字列の比較を使用しており、配列が文字列に変換されるときはすべて等しいので、すべてが交差点になります。 (そして、文字列変換の通知に配列の束を得るのはお勧めできません。)配列として内部配列を比較するには、array_uintersectを使用し、配列を比較するコールバックを使用します。

$x = array_uintersect($a, $b, function($a, $b) { 
    return $a <=> $b; 
}); 

あなたがPHP 7を持っていない場合は、その機能を複製するために、いくつかのより多くの行が必要になりますので、あなたは、<=>演算子を使用することはできません。

$x = array_uintersect($a, $b, function($a, $b) { 
    if ($a < $b) return -1; 
    if ($a > $b) return 1; 
    return 0; 
}); 
+0

私はあなたのメソッドを試しましたが、 1番目の配列。 – yuhell

+0

@yuhellなぜ私はそれをテストしたときにうまくいったのか分かりません。あなたは正しい、それは動作しませんでした。私は答えを更新しました。 –

0

この解決策を確認してください。両方の配列のキーが同じである/マッチングしていると考えます。

//Computes the intersection of arrays, compares data by a callback function 
$intersect_array = array_uintersect($a, $b, 'compareArray'); 
print_r($intersect_array); 

// call back function code 
function compareArray($val1, $val2){ 
    // convert the array to string by serialize and compare the strings 
    return strcmp(serialize($val1), serialize($val2)); 
} 

アウト置く:

Array 
(
    [3] => Array 
     (
      [field_name] => Beauty - Care 
      [zonegeo] => Angola 
     ) 

    [5] => Array 
     (
      [field_name] => Beauty - Care 
      [zonegeo] => Swaziland 
     ) 

)