/** * 递归合并两个或多个数组 * 本函数内使用for语句,以及func_get_arg函数,实现多个数组递归合并 * $john = array('name' => 'john', 'children' => array('fred', 'paul', 'sally', 'jane')); * $mary = array('name' => 'mary', 'children' => array('jane')); * * $john = Helper_Array::merge($john, $mary); * * array('name' => 'mary', 'children' => array('fred', 'paul', 'sally', 'jane')) * * @param a1 原始数组 * @param a2 需要合并的数组 * @return array */ public static function merge(array $a1, array $a2) { $result = array(); for ($i = 0, $total = func_num_args(); $i < $total; $i++) { $arr = func_get_arg($i); $assoc = Helper_Array::isAssoc($arr); foreach ($arr as $key => $val) { if (isset($result[$key])) { if (is_array($val) && is_array($result[$key])) { if (Helper_Array::isAssoc($val)) { $result[$key] = Helper_Array::merge($result[$key], $val); } else { $diff = array_diff($val, $result[$key]); $result[$key] = array_merge($result[$key], $diff); } } else { if ($assoc) { $result[$key] = $val; } elseif (!in_array($val, $result, true)) { $result[] = $val; } } } else { $result[$key] = $val; } } } return $result; }