2011-10-06 58 views
1

我正在尋找一種方法來執行多維數組之間非常奇怪的數組合並。以下面的兩個數組arrayOnearrayTwo爲例。基於兩個唯一值合併php數組

我想數組合併到arrayThree,這將顯示陣列的項目,如果是既numberletter組合是唯一的獨一無二的。它會將一個數組中的值與另一個數組合並,如果該值不存在,那麼它將提供一個空字符串。 (關於我的意思,請參閱arrayThree

任何想法?

$arrayOne = array(
     array('number' => 1, 'letter' => 'a', 'qcol' => 'tennis'), 
     array('number' => 1, 'letter' => 'b', 'qcol' => 'soccer'), 
     array('number' => 2, 'letter' => 'a', 'qcol' => 'basketball'), 
     array('number' => 2, 'letter' => 'b', 'qcol' => 'football'), 
     array('number' => 3, 'letter' => 'a', 'qcol' => 'bowling'), 
     array('number' => 3, 'letter' => 'b', 'qcol' => 'rugby') 
    ); 

$arrayTwo = array(
     array('number' => 1, 'letter' => 'a', 'rval' => 'bus'), 
     array('number' => 1, 'letter' => 'b', 'rval' => 'car'), 
     array('number' => 2, 'letter' => 'a', 'rval' => 'truck'), 
     array('number' => 2, 'letter' => 'b', 'rval' => 'plane'), 
     array('number' => 4, 'letter' => 'b', 'rval' => 'boat') 
    ); 

將合併到:

$arrayThree = array(
     array('number' => 1, 'letter' => 'a', 'rval' => 'bus', 'qcol' => 'tennis'), 
     array('number' => 1, 'letter' => 'b', 'rval' => 'car', 'qcol' => 'soccer'), 
     array('number' => 2, 'letter' => 'a', 'rval' => 'truck', 'qcol' => 'basketball'), 
     array('number' => 2, 'letter' => 'b', 'rval' => 'plane', 'qcol' => 'football'), 
     array('number' => 3, 'letter' => 'a', 'rval' => '', 'qcol' => 'bowling'), 
     array('number' => 3, 'letter' => 'b', 'rval' => '', 'qcol' => 'rugby'), 
     array('number' => 4, 'letter' => 'b', 'rval' => 'boat', 'qcol' => '') 
    ); 

回答

3
$arrayThree = array(); 

foreach ($arrayOne as $i) { 
    $arrayThree[$i['number'] . $i['letter']] = $i + array('rval' => null); 
} 
foreach ($arrayTwo as $i) { 
    $key = $i['number'] . $i['letter']; 
    if (isset($arrayThree[$key])) { 
     $arrayThree[$key]['rval'] = $i['rval']; 
    } else { 
     $arrayThree[$key] = $i + array('qcol' => null); 
    } 
} 

$arrayThree = array_values($arrayThree);