【问题标题】:asort using the second element使用第二个元素进行排序
【发布时间】:2021-01-17 16:29:46
【问题描述】:

从这个数组开始:

$TEST=array (
    0 => array ( 0 => 'b', 1 => 'y', 2 => 'O', ),
    1 => array ( 0 => 'a', 1 => 'z', 2 => 'O', ),
    2 => array ( 0 => 'c', 1 => 'x', 2 => 'O', ),
)

如何排序? (xyz 基于第二个元素):

$TEST=array (
    2 => array ( 0 => 'c', 1 => 'x', 2 => 'O', ),
    0 => array ( 0 => 'b', 1 => 'y', 2 => 'O', ),
    1 => array ( 0 => 'a', 1 => 'z', 2 => 'O', ),
)

简单的asort($TEST) 的结果是(abc 基于第一个元素):

$TEST=array (
    1 => array ( 0 => 'a', 1 => 'z', 2 => 'O', ),
    0 => array ( 0 => 'b', 1 => 'y', 2 => 'O', ),
    2 => array ( 0 => 'c', 1 => 'x', 2 => 'O', ),
)

【问题讨论】:

    标签: php sorting asort


    【解决方案1】:

    你可以用这一行代码做到这一点:

    array_multisort( array_column($yourArray, $index), SORT_ASC, $yourArray );
    

    在你的情况下,这是如何使用它:

    $TEST=array (
        0 => array ( 0 => 'b', 1 => 'y', 2 => 'O', ),
        1 => array ( 0 => 'a', 1 => 'z', 2 => 'O', ),
        2 => array ( 0 => 'c', 1 => 'x', 2 => 'O', ),
    )
    array_multisort( array_column($TEST, 1), SORT_ASC, $TEST );
    print_r($TEST);
    

    在此处检查 array_multisort http://php.net/manual/en/function.array-multisort.php

    【讨论】:

    • @bobdylan 请注意,这会更改数组的键...
    【解决方案2】:

    带有飞船的显式 uasort:

    <?php
    
    $items = [
        0 => [ 0 => 'b', 1 => 'y', 2 => 'O' ],
        2 => [ 0 => 'c', 1 => 'x', 2 => 'O' ],
        1 => [ 0 => 'a', 1 => 'z', 2 => 'O' ]
    ];
    
    uasort($items, function($a, $b) { return $a[1] <=> $b[1]; });
    var_export($items);
    

    输出:

    array (
      2 => 
      array (
        0 => 'c',
        1 => 'x',
        2 => 'O',
      ),
      0 => 
      array (
        0 => 'b',
        1 => 'y',
        2 => 'O',
      ),
      1 => 
      array (
        0 => 'a',
        1 => 'z',
        2 => 'O',
      ),
    )
    

    用短箭头函数表示:

    uasort($items, fn($a, $b) => $a[1] <=> $b[1]);
    

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 2012-03-08
      • 2020-05-24
      • 2015-06-16
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      相关资源
      最近更新 更多