php数组函数库

/**
 * 提取数组中key在key_arr中的元素
 * @param array $source_arr 原数组
 * @param string $key_arr key作为值组成的数组
 * @return $mode 数组
 */
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;
}

/**
 * 取数组指定个数的键和值组成新数组
 * ,先排序可以取排名
 * @param array $source_arr
 * @param type $number
 * @return array
 */
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;
}

/**
 * 从后往前
 * 取数组指定个数的键和值组成新数组
 * ,先排序可以取排名
 * @param array $source_arr
 * @param type $number
 * @return array
 */
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;
}

/**
 * array_merge但是保留key(当索引是数字是 array_merge会重新设置索引)
 * @param array $source_arr1 数组1
 * @param string $source_arr2 数组2
 * @return array 目标数组
 */
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;
}

/**
 * 使用$key_map替换数组中的索引名字
 * @param array $source_arr 原数组
 * @param string $key_map 索引名映射数组
 * @return array $des_arr  目标数组
 */
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;
}

/**
 * 数组分组
 * @param array $arr 原数组
 * @param string $key 分组1
 * @return array 分组后的数组
 */
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;
}

猜你喜欢

转载自blog.csdn.net/u012993454/article/details/81705816