2011-10-06 78 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);