2012-03-02 38 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