首页  >  文章  >  后端开发  >  php怎么根据数组中两个字段来排序

php怎么根据数组中两个字段来排序

PHPz
PHPz原创
2023-04-18 09:06:04919浏览

在 PHP 中,当我们需要对数组进行排序时,可以使用 sort()、rsort() 等内置函数来对数组中的元素进行排序。但是,有时候我们需要根据数组中的两个字段来进行排序,这时就需要使用 usort() 函数了。

usort — 使用用户自定义的比较函数对数组中的值进行排序

语法:bool usort ( array &$array, callable $value_compare_func )

该函数使用指定的比较函数对数组中的值进行排序。需要注意的是,此函数直接影响原数组,它不返回排序后的数组。

使用场景

在处理一些复杂的应用时,有时候需要按照多个字段来排序,比如优先按照价格排序,价格一样时再按照销量排序,那么我们就需要使用 usort() 函数来实现。

示例代码

下面是一个实际的使用 usort() 函数排序数组的例子。假设我们有一个商品数组,包含商品的名称、价格、销量等信息,现在我们需要根据价格和销量来对商品进行排序。

$products = [
   [
      "name" => "商品A",
      "price" => 100,
      "sales" => 200
   ],
   [
      "name" => "商品B",
      "price" => 120,
      "sales" => 150
   ],
   [
      "name" => "商品C",
      "price" => 80,
      "sales" => 300
   ],
];

function cmp($a, $b) {
   if ($a['price'] == $b['price']) {
      return $a['sales'] < $b[&#39;sales&#39;] ? 1 : -1;
   }
   return $a[&#39;price&#39;] > $b['price'] ? 1 : -1;
}

usort($products, "cmp");

print_r($products);

运行结果:

Array
(
    [0] => Array
        (
            [name] => 商品C
            [price] => 80
            [sales] => 300
        )

    [1] => Array
        (
            [name] => 商品A
            [price] => 100
            [sales] => 200
        )

    [2] => Array
        (
            [name] => 商品B
            [price] => 120
            [sales] => 150
        )
)

这里我们定义了一个 cmp() 函数,该函数用于比较两个商品的价格和销量,并按照价格从小到大、销量从大到小的顺序排序。然后通过 usort() 函数对商品数组进行排序,并打印排序后的结果。

总结

使用 usort() 函数可以灵活地对数组进行排序,可以根据多个字段进行排序,实现更加复杂的应用需求。这里需要注意,排序函数要比较的是两个数组元素,因此 $a 和 $b 分别表示数组中的两个元素,函数需要返回正数、负数和 0 三个值中的一个,表示 $a 比 $b 大、小或相等。

以上是php怎么根据数组中两个字段来排序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn