2012-03-02 29 views
0

我有一个包含值的数组的长列表。我正在尝试编写一个脚本,用于在数组中找到重复的键/值对,并向我报告,以便我知道哪些数组具有相同的数据。处理PHP数组列表以找到包含相同键/值的数组

$array = array(
    'one' => array('foo' => 'foo', 'baz' => 'baz', 'bar' => 'bar'), 
    'two' => array('foo' => 'foo', 'baz' => 'baz', 'nil' => 'nil'), 
    'three' => array('foo' => 'foo', 'var' => 'var'), 
    'four' => array('var' => 'var', 'nil' => 'nil'), 
    'five' => array('bar' => 'bar') 
); 

// First failed attempt 
//call_user_func_array('array_intersect_assoc', $array)); 

结果应该能够识别2个或更多数组共享相同的键和值。

array(
    array(
     'keys' => array('one', 'two', 'three'), 
     'values' => array('foo' => 'foo') 
    ), 
    array(
     'keys' => array('one', 'five'), 
     'values' => array('bar' => 'bar') 
    ), 
    array(
     'keys' => array('one', 'two'), 
     'values' => array('foo' => 'foo', 'baz' => 'baz') 
    ), 
    array(
     'keys' => array('three', 'four'), 
     'values' => array('var' => 'var') 
    ), 
    array(
     'keys' => array('two', 'four'), 
     'values' => array('nil' => 'nil') 
    ), 
); 

什么是处理这些数组的正确方法?我怎样才能实现这样的事情?

+0

看看'array_intersect',这可能有所帮助。 – ngen 2012-03-02 00:30:57

+0

如果所有的键和值都相等,你应该重新考虑你的数据结构。反正代表什么? – phihag 2012-03-02 00:32:06

+0

@phihag,我正在处理传入我的应用程序的数据。我需要找到重复的东西,以便它们可以固定或合并在一起。 – Xeoncross 2012-03-02 00:44:51

回答

2

实际上,假设值始终是字符串,这很容易。

$master = array(); 
foreach($array as $name => $row) 
{ 
    foreach($row as $key => $value) 
    { 
     if(empty($master[$key.$value])) 
     { 
      $master[$key.$value] = array(); 
     } 
     $master[$key.$value][] = $name; 
    } 
} 
print_r($master); 
+2

聪明 - 你可以使用'serialize(..)'来获得更多的覆盖 – 2012-03-02 00:52:34