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

+0

すべてのキーと値が等しい場合は、実際にデータ構造を再考する必要があります。とにかくそれは何を表すべきですか? – phihag

+0

@phihag、私は自分のアプリに来るデータを処理しています。私は重複を見つける必要がありますので、それらを一緒に固定またはマージすることができます。 – Xeoncross

答えて

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

Clever - より多くのカバレッジのために 'serialize(..) 'を使用できるかもしれません –

関連する問題