2015-09-07 220 views
1

这是我的2个阵列:PHP - 比较两个数组

Array 
(
[25] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

[26] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

[36] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 
      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

) 

Array 
(
[25] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

[26] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

[30] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

) 

,现在我想比较这些阵列,并返回其包含在两个数组所有arrayitems。在这个例子中是[25]和[26]。

,返回的数组应该是这样的(正如我所说[25]和[26]都包含在两个数组所以其返回):

Array 
(
[25] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 

[26] => Array 
    (
     [items_to_give] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

     [items_to_get] => Array 
      (
       [0] => Array 
        (
         [xx] => xx 
         [xx] => xx 
        ) 

      ) 

    ) 
) 

什么我已经尝试过:

$result = array_map("unserialize", array_intersect($this->serialize_array_values($array1),$this->serialize_array_values($array2))); 

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

    return $arr; 
} 

但是这会返回错误格式的数组。 [items_to_give]和[items_to_get]正被转换为索引[0]和[1],这是不可取的。

我想数组停留,因为他是返回时,这意味着我需要[items_to_give]和[items_to_get]而不是索引[0]和[1]

什么是其他可能的解决方案?感谢解决方案。

+1

尝试'和array_diff()' –

+1

array_intersect()和array_intersect_assoc() –

+1

听起来你正在寻找[array_intersect_key](http://php.net/manual/ en/function.array-intersect-key.php) – billyonecan

回答

1

试试这个功能:

function my_array_diff($arr1, $arr2) 
    { 
    $res = array(); 
    foreach ($arr1 as $val1) { 
     $val1 = serialize($val1); 
     foreach ($arr2 as $key2 => $val2) { 
     if (serialize($val2) == $val1) { 
      $res[$key2] = $val2; 
     } 
     } 
    } 

    return $res; 
    } 
+0

作品完美!非常感谢。 – lhuber