是否有构建php函数或我必须编写自己的一个来合并两个多维数组,如
$list1 = array("school1" => array('string1','string2'));
$list2 = array("school1" => array('string1','string3'),
"school2" => array('string1','string4','string5')
);
进入数组,其中无将被覆盖或省略。我想在'第二个数组'中只有唯一的值。意味着数组school1
仅包含字符串string1
Array ( [school1] => Array ( [0] => string3 [1] => string2 [2] => string1 )
[school2] => Array ( [0] => string5 [1] => string4 [2] => string1 ) )
理想的是,如果我可以拥有第二个数组= string1,string2 .... sorted desc
答案 0 :(得分:2)
我的解决方案
function merge_db_lists ($list1, $list2) {
$final_array = array();
$final_array = go_through_list($list1, $final_array);
$final_array = go_through_list($list2, $final_array);
return $final_array;
}
function go_through_list($list,$output){
foreach (array_keys($list) as $key){
if (array_key_exists($key, $output)){
foreach ($list[$key] as $item ){
$output[$key][] = $item;
}
arsort($output[$key]);
}
else{
$output[$key] = $list[$key];
}
}
return $output;
}
答案 1 :(得分:2)
我有类似的需求,因为我需要合并包含配置值的n维数组,所以我最后编写了一个函数,我只是将它扩展了一点以应用于n维数组。
/**
* Recursively merges $array2 to $array1 while keeping the $array2 values
* and keys unique.
*
* @param array $array1 - destination array
* @param array $array2 - array containing new values
* @return array
*/
public function arraysMergeUnique($array1, $array2)
{
foreach ($array2 as $k => $v)
{
if ( is_array($array1) )
{
// If the meaning the value is a string, and doesn't already exist, add it
if ( is_string($v) && ! in_array($v, $array1) )
{
$array1[] = $v;
}
// If the value's an array, make a recursive call with it
else if ( is_array($v) )
{
if ( isset($array1[$k]) )
{
$array1[$k] = $this->arraysMergeUnique($array1[$k], $v);
}
else
{
$array1[$k] = $v;
}
}
}
else
{
$array1 = array($v);
}
}
return $array1;
}
例如,如果您的列表更深,如果'school1'包含'class1':
$list1 = array(
'school1' => array(
'string1',
'string2',
'class 1' => array(
'student 1',
)
)
);
$list2 = array(
'school1' => array(
'string1',
'string3',
'class 1' => array(
'student 1',
'student 2',
),
'class 2' => array(
'student 3',
),
),
'school2' => array(
'string1',
'string4',
'string5'
)
);
生成的数组将完全合并:
$result = array(
'school1' => array(
'string1',
'string2',
'class 1' => array(
'student 1',
'student 2'
),
'string3',
'class 2' => array(
'student 3'
)
),
'school2' => array(
'string1',
'string4',
'string5'
)
);
该函数可能应该被编写,以便它可以使用引用,而不是像这样的值,这将大大提高大数组的性能,但是这个适用于较小的数组。