'org value'), array('key' => 'new value')); * => array('key' => array('org value', 'new value')); * * array_merge_recursive_distinct does not change the datatypes of the values in the arrays. * Matching keys' values in the second array overwrite those in the first array, as is the * case with array_merge, i.e.: * * array_merge_recursive_distinct(array('key' => 'org value'), array('key' => 'new value')); * => array('key' => array('new value')); * * Parameters are passed by reference, though only for performance reasons. They're not * altered by this function. * * @since 1.0 * @param array $array1 * @param array $array2 * @return array * @author Daniel * @author Gabriel Sobrinho */ function array_merge_recursive_distinct ( array &$array1, array &$array2 ) { $merged = $array1; foreach ( $array2 as $key => &$value ) { if ( is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] ) ) { $merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value ); } else $merged [$key] = $value; } return $merged; } } if (!function_exists('array_pick')) { /** * Picks values with certain keys from an array. * * @since 1.0 * @param array $array An array, from which to pick. Will not be modified; passed by refrence for efficiency. * @param string|int|array $keys A key or array of keys to pick. * @return array */ function array_pick($array, $keys) { $keys = (array)$keys; return array_intersect_key($array, array_flip($keys)); } }