全方位站长技能、SEO优化学习平台
当前位置:网站首页 > PHP笔记 > 正文

php二维数组按某个字段排序

作者:文煞发布时间:2024-03-16分类:PHP笔记浏览:195


温馨提示:手机扫码可阅读当前文章!
文章简介:我们在使用PHP处理数组的时候经常需要对数组进行排序,对于新手来说,可能还不知道怎么对数组进行排序,那么你就可以看看这篇文章,本篇文章将介绍PHP对数组顺序的重新排列知识。如果你已经熟练掌握PHP知识和运用技巧,那么这篇文章可能对你没有任何...

我们在使用PHP处理数组的时候经常需要对数组进行排序,对于新手来说,可能还不知道怎么对数组进行排序,那么你就可以看看这篇文章,本篇文章将介绍PHP对数组顺序的重新排列知识。如果你已经熟练掌握PHP知识和运用技巧,那么这篇文章可能对你没有任何帮助!


php二维数组按某个字段排序  第1张

一、PHP排序函数


PHP 提供了多种函数对数组进行排序,这些函数可以根据不同的需求对数组进行升序或降序排序。下面介绍几种常用的排序函数及其简要描述:


1. sort():对数组进行升序排列。

2. rsort() :对数组进行降序排列。

3. asort():根据值,以升序对关联数组进行排序,保持键值对应关系。

4. arsort():根据值,以降序对关联数组进行排序,保持键值对应关系。

5. ksort():根据键,以升序对关联数组进行排序。

6. krsort():根据键,以降序对关联数组进行排序。

7. usort():使用用户自定义的比较函数对数组进行排序。

8. uasort():使用用户自定义的比较函数对关联数组进行排序,保持键值对应关系。

9. uksort():使用用户自定义的比较函数对关联数组的键进行排序。

10. array_multisort()+uasort()函数搭配:可对二维数组(复杂的多维数组)进行排序。


注意:sort()、rsort()、asort()、arsort()、ksort() 和 krsort()都是用来对关联数组进行排序的,它们会改变原数组的顺序。但是 usort()、uasort() 和 uksort()则允许使用自定义的比较函数来决定排序逻辑,适用于更复杂的排序需求。


二、PHP对数组排序的方法


案例一:sort()排序案例


当使用sort()函数对数组进行排序时,它会按照升序对数组进行排序:


<?php
// 创建一个数组
$numbers = array(4, 2, 8, 1, 5);
// 使用sort()函数对数组进行排序
sort($numbers);
// 打印排序后的数组
print_r($numbers);
?>


运行以上代码,输出将会是:


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


可以看到,数组已经按照升序进行了排序。sort()函数会直接修改原始数组,并在原地进行排序。如果你希望保留原始数组不变,可以使用rsort()函数进行降序排序。


案例二:asort()排序案例


<?php
$fruits = array("apple", "banana", "orange", "grape");
asort($fruits);
foreach ($fruits as $key => $value) {
    echo "$key : $value <br>";
}
?>


输出结果为:


1 : banana
0 : apple
2 : orange
3 : grape


案例三:ksort()排序案例



ksort() 函数用于对数组按照键名进行排序,案例代码:


<?php
// 创建一个数组
$array = array(
    "key3" => "value3",
    "key1" => "value1",
    "key2" => "value2"
);
// 使用 ksort() 对数组按照键名进行排序
ksort($array);
// 打印排序后的数组
foreach ($array as $key => $value) {
    echo $key . " => " . $value . "<>";
}
?>


输出结果将会是:


key1 => value1
key2 => value2
key3 => value3


在这个例子中,ksort()函数首先会比较数组中的键名,然后按照键名的 ASCII 值进行升序排序。在这个排序过程中,数组中的元素顺序可能会改变,但键名和它们对应的值将会按照键名的顺序排列。


案例四:usort(), uasort(), 和uksort()排序案例


在PHP中,usort(), uasort(), 和uksort()函数都可以用来对数组进行排序,但它们之间有一些区别。上面已经为大家介绍过了, usort()函数根据用户自定义的比较函数来对数组进行排序;uasort()函数也是用用户自定义的比较函数对数组进行排序,但它保持索引与值之间的关联。uksort()函数根据键进行排序,同样使用用户自定义的比较函数。


<?php
// 示例数组
$array1 = array(
    "a" => "apple",
    "b" => "banana",
    "g" => "grape",
    "m" => "mango"
);
// usort() 案例 - 根据值排序
usort($array1, function($a, $b) {
    return strlen($a) <=> strlen($b); // 根据字符串长度进行排序
});
print_r($array1);
// uasort() 案例 - 根据值排序,保持索引与值之间的关联
uasort($array1, function($a, $b) {
    return strlen($a) <=> strlen($b); // 根据字符串长度进行排序
});
print_r($array1);
// uksort() 案例 - 根据键排序
uksort($array1, function($a, $) {
    return strcmp($a, $b); // 根据键的字符串进行排序
});
print_r($array1);
?>


下面是运行效果:


使用 usort()`函数排序后的数组:


Array
(
    [0] => apple
    [2] => banana
    [1] => grape
    [3] => mango
)


使用 uasort()`函数排序后的数组:


Array
(
    [0] => apple
    [3] => banana
    [1] => grape
    [2] => mango
)


使用uksort()函数排序后的数组:


Array
(
    [mango] => Array
        (
            [0] => mango
        )
    [grape] => Array
        (
            [0] => grape
        )
    [banana] => Array
        (
            [0] => banana
        )
    [apple] => Array
        (
            [0] => apple
        )
)


这个脚本展示了如何使用用户定义的回调函数来排序数组。对于usort()和uasort(),我们比较字符串的长度来决定顺序;对于uksort(),我们比较键本身。执行这段代码,你将得到每个函数按照自己规则排序后的数组输出。可以看到,usort()根据字符串长度对数组进行了排序,则不保证键与值之间的关联;而uasort()则保持了索引与值之间的关联。uksort()则完全根据键本身进行了排序,与值无关。


三、PHP对二维数组进行排序



对于二维数组,PHP 没有直接的函数进行排序,但可以使用array_multisort()函数,该函数可以对多个数组进行排序,或者对数组的多个维度进行排序。此外,也可以使用array_column()函数配合usort()等函数来实现对二维数组按照某一字段进行排序。


在学习PHP对二维数组进行排序的方法前,我们先来认识一下array_multisort()函数。array_multisort()函数用于对多个数组或多维数组进行排序。该函数可以接受多个数组作为参数,并根据这些数组的值进行排序,从而在最终结果中使对应的值保持关联。


定义:bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )


参数说明:


array1: 必需,要排序的第一个数组。

array1_sort_order: 可选,用于指定排序顺序,可以是SORT_ASC(升序)或SORT_DESC(降序)。默认为SORT_ASC。

array1_sort_flags: 可选,用于指定排序规则,可以是SORT_REGULAR(常规比较)、SORT_NUMERIC(数值比较)、SORT_STRING(字符串比较)、SORT_LOCALE_STRING(基于当前区域设置的字符串比较)。默认为SORT_REGULAR。

...可选,可以继续添加更多的数组参数。


返回值:如果排序成功,则返回true;否则返回false。


案例五:按照指定字段对二维数组进行排序


如需要将以下$data数组按照第二维的字段score进行排序,则可以按如下代码:

<?php

$data = [
    ['name' => '张三', 'age' => '20', 'score' => '78'],
    ['name' => '李四', 'age' => '21', 'score' => '78'],
    ['name' => '王五', 'age' => '20', 'score' => '60'],
    ['name' => '大强子', 'age' => '26', 'score' => '100']
];
array_multisort(array_column($data, 'score'), SORT_DESC, $data);
echo '<pre>';print_r($data);
?>


这里的DESC是降序,ASC是升序。打印结果如下:


Array
(
    [0] => Array
        (
            [name] => 大强子
            [age] => 26
            [score] => 100
        )
    [1] => Array
        (
            [name] => 张三
            [age] => 20
            [score] => 78
        )
    [2] => Array
        (
            [name] => 李四
            [age] => 21
            [score] => 78
        )
    [3] => Array
        (
            [name] => 王五
            [age] => 20
            [score] => 60
        )
)


案例六:按照多重自定义字段对数组进行排序

<?php

$data = [
    ['name' => '张三', 'age' => '20', 'score' => '78'],
    ['name' => '李四', 'age' => '21', 'score' => '78'],
    ['name' => '王五', 'age' => '20', 'score' => '60'],
    ['name' => '大强子', 'age' => '26', 'score' => '100']
];
// 将数据根据 age 升序排列,根据 score 降序排列
array_multisort(array_column($data, 'age'), SORT_ASC, array_column($data, 'score'), SORT_DESC, $data);

echo '<pre>';print_r($data);
?>


打印结果如下:


Array
(
    [0] => Array
        (
            [name] => 张三
            [age] => 20
            [score] => 78
        )
    [1] => Array
        (
            [name] => 王五
            [age] => 20
            [score] => 60
        )
    [2] => Array
        (
            [name] => 李四
            [age] => 21
            [score] => 78
        )
    [3] => Array
        (
            [name] => 大强子
            [age] => 26
            [score] => 100
        )
)


提示:array_column(数组, 数组中的某个键值) 从二维维数组中取出某个键值的一列  返回一个一维数组;array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引。

欢迎您,来自美国–俄亥俄州–特拉华县–都柏林的朋友,您的IP:18.188.113.189,您的网络:Amazon数据中心


PHP笔记排行
随机推荐
猜你喜欢

服务热线

1888888888

要发发发发发发

站长微信公众号

站长微信公众号

分享:

支付宝

微信