构建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 ) )
理想的情况是,如果我能有第二个数组 = 字符串 1, 字符串 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;
}
我也有类似的需求,因为我需要合并包含配置值的 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'
)
);
该函数可能应该编写为使其与引用一起使用,而不是像这样的值,这将大大提高大数组的性能,但这个函数适用于较小的数组。