当前位置:网站首页>PHP 二维数组根据某个字段排序

PHP 二维数组根据某个字段排序

2022-08-09 20:51:00 全栈程序员站长

大家好,又见面了,我是你们的朋友全栈君。

数据: data[] = array(‘customer_name’ => ‘小李’, ‘money’ => 12, ‘distance’ => 2, ‘address’ => ‘长安街C坊’); data[] = array(‘customer_name’ => ‘赵小雅’, ‘money’ => 89, ‘distance’ => 6, ‘address’ => ‘解放路恒基大厦A座’); data[] = array(‘customer_name’ => ‘李亮亮’, ‘money’ => 45, ‘distance’ => 26, ‘address’ => ‘天山西路198弄’);

方法一:

function arraySort($array,$keys,$sort='asc') { 
   
    $newArr = $valArr = array();
    foreach ($array as $key=>$value) { 
   
        $valArr[$key] = $value[$keys];
    }
    ($sort == 'asc') ?  asort($valArr) : arsort($valArr);
    reset($valArr);
    foreach($valArr as $key=>$value) { 
   
        $newArr[$key] = $array[$key];
    }
    return $newArr;
}

方法二:

/** * 二维数组根据某个字段排序 * @param array $array 要排序的数组 * @param string $keys 要排序的键字段 * @param string $sort 排序类型 SORT_ASC SORT_DESC * @return array 排序后的数组 */
function arraySort($array, $keys, $sort = SORT_DESC) { 
   
    $keysValue = [];
    foreach ($array as $k => $v) { 
   
        $keysValue[$k] = $v[$keys];
    }
    array_multisort($keysValue, $sort, $array);
    return $array;
}

# 按距离降序排序
$a = arraySort($data, 'distance', SORT_DESC);
print_r($a);
# 按money升序排序
$b = arraySort($data, 'money', SORT_ASC);
print_r($b);
Array
(
    [0] => Array
        (
            [customer_name] => 李亮亮
            [money] => 45
            [distance] => 26
            [address] => 天山西路198弄
        )

    [1] => Array
        (
            [customer_name] => 董娟
            [money] => 67
            [distance] => 17
            [address] => 新大南路2号
        )
)

扩展:

定义和用法 reset() 函数将内部指针指向数组中的第一个元素,并输出。 current() – 返回数组中的当前元素的值。 end() – 将内部指针指向数组中的最后一个元素,并输出。 next() – 将内部指针指向数组中的下一个元素,并输出。 prev() – 将内部指针指向数组中的上一个元素,并输出。 each() – 返回当前元素的键名和键值,并将内部指针向前移动。

sort 对数组的值按照升序排列(rsort降序),不保留原始的键 ksort 对数组的键按照升序排列(krsort降序) 保留键值关系 asort 对数组的值按照升序排列(arsort降序),保留键值关系

array_multisort
  • 排序顺序标志: SORT_ASC – 按照上升顺序排序 SORT_DESC – 按照下降顺序排序
  • 排序类型标志: SORT_REGULAR – 将项目按照通常方法比较 SORT_NUMERIC – 将项目按照数值比较 SORT_STRING – 将项目按照字符串比较 每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 – 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。
$ar = array(
    array("b10", 'c11', 101, 100, "a"),
    array(1, 2, "2", 9, 5)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC);
print_r($ar);
Array
(
    [0] => Array
        (
            [0] => 100
            [1] => 101
            [2] => a
            [3] => b10
            [4] => c11
        )

    [1] => Array
        (
            [0] => 9
            [1] => 2
            [2] => 5
            [3] => 1
            [4] => 2
        )

)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105808.html原文链接:https://javaforall.cn

原网站

版权声明
本文为[全栈程序员站长]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/2069185