dongren4147 2017-01-24 11:59
浏览 40

PHP usort:使用单个函数按两个键排序

I have the next array:

Array
(
[0] => Array
    (
        [name] => 'Paul'
        [value_1] => 3
        [value_2] => 2
    )

[1] => Array
    (
        [name] => 'John'
        [value_1] => 6
        [value_2] => 5
    )
[2] => Array
    (
        [name] => 'Steve'
        [value_1] => 1
        [value_2] => 9
    )
[3] => Array
    (
        [name] => 'Joe'
        [value_1] => 8
        [value_2] => 1
    )    
 )

I need to sort the array by key value_1 or value_2 depending on the situation.

I do this:

<?php

$i = 1;    
usort($my_array, 'sortByOrder_'.$i);

$i = 2;    
usort($my_array, 'sortByOrder_'.$i);

function sortByOrder_1($a, $b) {        
    if ($a['value_1'] < $b['value_1'])
        return 1;          
}

function sortByOrder_2($a, $b) {    
     if ($a['value_2'] < $b['value_2'])
        return 1;        
}

?>

It is possible to unify in a single function?. Something like this:

function sortByOrder_1($a, $b, $i) {

    if ($a['value_'.$i] < $b['value_'.$i])
        return 1;      

}
  • 写回答

1条回答 默认 最新

  • dongtiao0657 2017-01-24 12:06
    关注

    You can use something like a factory, e.g.:

    <?php
    $input = [
        [
            'name' => 'Paul',
            'value_1' => 3,
            'value_2' => 2,
        ], [
            'name' => 'John',
            'value_1' => 6,
            'value_2' => 5,
        ], [
            'name' => 'Steve',
            'value_1' => 1,
            'value_2' => 9,
        ], [
            'name' => 'Joe',
            'value_1' => 8,
            'value_2' => 1,
        ]
    ];
    
    $cmp = function ($key) {
        return function ($a, $b) use($key) {
            if ($a[$key] < $b[$key]) {
                return 1;
            }
        };
    };
    
    usort($input, $cmp('value_1'));
    print_r($input);
    
    usort($input, $cmp('value_2'));
    print_r($input);
    
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度