function array_extract_key(Array $source_arr, $key_arr = [])
{
if (empty($key_arr))
{
return array_values($source_arr);
}
if (is_string($key_arr))
{
$key_arr = [ $key_arr ];
}
$new_list = [];
foreach ($source_arr as $key => $value)
{
if (in_array($key, $key_arr))
{
$new_list[$key] = $value;
}
}
return $new_list;
}
function array_rank_num(Array $source_arr, $number)
{
$temp_arr = $source_arr;
$new_arr = [];
for ($i = 0; $i < $number; $i++)
{
$value = array_shift($source_arr);
$key = array_search($value, $temp_arr);
unset($temp_arr[$key]);
if ($key!==FALSE)
{
$new_arr[$key] = $value;
}
}
return $new_arr;
}
function array_pop_num(Array $source_arr, $number)
{
$temp_arr = $source_arr;
$new_arr = [];
for ($i = 0; $i < $number; $i++)
{
$value = array_pop($source_arr);
$key = array_search($value, $temp_arr);
unset($temp_arr[$key]);
if ($key!==FALSE)
{
$new_arr[$key] = $value;
}
}
return $new_arr;
}
function array_merge_plus(Array $source_arr1)
{
$args_num = func_num_args();
$args_arr = func_get_args();
for ($i = 1; $i < $args_num; $i++)
{
foreach ($args_arr[$i] as $key => $value)
{
$source_arr1[$key] = $value;
}
}
return $source_arr1;
}
function array_replace_keys(Array &$source_arr, Array $key_map = [])
{
if (empty($key_map))
{
return $source_arr;
}
foreach ($source_arr as $key => $value)
{
if (isset($key_map[$key]))
{
$source_arr[$key_map[$key]] = $value;
unset($source_arr[$key]);
}
}
return $source_arr;
}
function array_group_plus($arr, $key)
{
$grouped = [];
foreach ($arr as $value)
{
$new_key = isset($value[$key]) ? $value[$key] : '';
$grouped[$new_key][] = $value;
}
if (func_num_args() > 2)
{
$args = func_get_args();
foreach ($grouped as $key => $value)
{
$parms = array_merge([ $value ], array_slice($args, 2, func_num_args()));
$grouped[$key] = call_user_func_array('array_group_by', $parms);
}
}
return $grouped;
}