如何通过嵌套在其中的元素对PHP数组进行排序?

2020/12/26 08:21 · php ·  · 0评论

我有一个像下面这样的数组:

数组
    [0] =>数组
            '名称'=>“星期五”
            '重量'=> 6
    [1] =>数组
            '名称'=>“星期一”
            '重量'=> 2

我想获取该数组中的最后一个值(“权重”),然后使用该值对主要数组元素进行排序。因此,在此数组中,我想对其进行排序,以使“星期一”元素出现在“星期五”元素之前。

您可以usort用作:

function cmp($a, $b) {
   return $a['weight'] - $b['weight'];
}

usort($arr,"cmp");

可以使用匿名函数来完成

另外,如果您的“ weight”是字符串,请使用其他返回值之一(请参见注释行):

<?php

$arr = array(
    0 => array (
        'name'   => 'Friday',
        'weight' => 6,
    ),
    1 => array (
        'name'   => 'Monday',
        'weight' => 2,
    ),
);

// sort by 'weight'
usort($arr, function($a, $b) { // anonymous function
    // compare numbers only
    return $a['weight'] - $b['weight'];

    // compare numbers or strings
    //return strcmp($a['weight'], $b['weight']);

    // compare numbers or strings non-case-sensitive
    //return strcmp(strtoupper($a['weight']), strtoupper($b['weight']));
});

var_export($arr);

/*
array (
    0 => array (
        'name'   => 'Monday',
        'weight' => 2,
    ),
    1 => array (
        'name'   => 'Friday',
        'weight' => 6,
    ),
)
*/

试试这个:http :
//php.net/manual/en/function.usort.php

您还可以使用匿名函数。

usort($items, function($a, $b) {
    return $a['name'] > $b['name'];
});

同意usort,有时我还会使用array_multisort(http://ca2.php.net/manual/en/function.usort.php)示例3,对数据库结果进行排序。您可以执行以下操作:

<?php
$days = array(
  array('name' => 'Friday', 'weight' => 6),
  array('name' => 'Monday', 'weight' => 2),
);

$weight = array();
foreach($days as $k => $d) {
  $weight[$k] = $d['weight'];
}

print_r($days);

array_multisort($weight, SORT_ASC, $days);

print_r($days);
?>

输出:

Array
(
    [0] => Array
        (
            [name] => Friday
            [weight] => 6
        )

    [1] => Array
        (
            [name] => Monday
            [weight] => 2
        )

)
Array
(
    [0] => Array
        (
            [name] => Monday
            [weight] => 2
        )

    [1] => Array
        (
            [name] => Friday
            [weight] => 6
        )

)

如果排序提起你就像串title name
在array_multisort为+标志自然排序CaseInSensitivity是要走的路:

$sort_by_title = array();
foreach($items as $item) {
  $sort_by_title [] = $item['title'];
}
array_multisort($sort_by_title , SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $items );

注意,如果要排序的元素是像.0534和.0353之类的浮点数(如百分比),则必须将两者乘以1000。不知道为什么坦率地说...似乎usort似乎在比较整数价值观。

花了我一段时间才找出那个...

和2条可能不会立即显而易见的提示:

  1. 如果您的数组是对象,则可以使用return $ a-> weight-$ b-> weight
  2. 如果返回$ b-> weight-$ a-> weight,它将按降序排序。

这是一个很酷的功能,可能会有所帮助:

function subval_sort($a,$subkey,$sort) {
    foreach($a as $k=>$v) {
        $b[$k] = strtolower($v[$subkey]);
    }
    if($b)
    {
        $sort($b);
        foreach($b as $key=>$val) {
            $c[] = $a[$key];
        }
        return $c;
    }
}

发送数组作为$a$subkey$sort变量的“ asort”或“ sort”

本文地址:http://php.askforanswer.com/ruhetongguoqiantaozaiqizhongdeyuansuduiphpshuzujinxingpaixu.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!