处理PHP数组列表以查找包含相同键/值的数组


Process list of PHP arrays to find arrays which contain the same keys/values

我有一长串包含值的数组。我正在尝试编写一个脚本,该脚本将在数组中定位重复的键/值对,并向我报告,以便我知道哪些数组具有相同的数据。

$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')
    ),
);

处理这些数组的正确方法是什么?我怎样才能取得这样的成就?

实际上,假设值总是字符串是非常容易的。

$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);