php二维数组指定键的排序,指定键的去重,指定键求和

-

// 二维,根据某个键的数值排序
function order_key_array($array, $key, $order){
    if (!$array){return [];}
    if (!$order){$order = 'desc';}

    // 选择排序法
    $temp = 0;
    for($i = 0;$i < count($array) - 1;$i++){
        $minVal = $array[$i][$key]; //假设$i就是最小值
        $minValIndex = $i;
        for($j = $i+1;$j < count($array);$j++){
            if ($order == 'desc'){
                if($minVal < $array[$j][$key]){ //从小到大排列
                    $minVal = $array[$j][$key]; //找最大值
                    $minValIndex = $j;
                }
            }else{
                if($minVal > $array[$j][$key]){ //从小到大排列
                    $minVal = $array[$j][$key]; //找最小值
                    $minValIndex = $j;
                }
            }
        }
        $temp = $array[$i][$key];
        $array[$i][$key] = $array[$minValIndex][$key];
        $array[$minValIndex][$key] = $temp;
    }
    $new_array = $array;

    return $new_array;
}

-

// 两个键去重,两个键为相同值时去重
function group_arrays($info, $db_key1, $db_key2){

    $have = [];
    $array = [];
    $index = [];

    for($m=0; $m<count($info); $m++){
        $has1 = $info[$m][$db_key1];
        $has2 = $info[$m][$db_key2];

        if (in_array([$has1=>$has2], $array)){
            // 存在则跳过
        }else{
            $array[] = [$has1=>$has2];
            $index[] = $m;
        }
    }

    foreach ($index as $value){
        $have[] = $info[$value];
    }

    return $have;
}

-

// 利用数组去重数组+json这样的一维数组,一般为直接从数据库查询的数组结果,去重某个键
// group_array(未去重数组, 要去重的json键名)
// 服务器环境不能使用group语法,所以做这个去重
function group_array($info, $db_key){

    $have = [];
    $array = [];
    for($m=0; $m<count($info); $m++){
        $has_id = $info[$m][$db_key];
        $array[] = $has_id;
    }
    $array = array_unique($array); // 返回 索引键=>id
    foreach ($array as $key=>$value){
        $have[] = $info[$key];
    }

    return $have;
}

-

// 求数组中某列中,所有同名键的值的和
function db_array_sum($array, $key){

    return array_sum(array_column($array, $key));
}

-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值