PHP数组按第二个键排序

时间:2012-05-17 17:46:40

标签: php sorting

我有一个需要按“是”和“否”键排序的数组 - 如何在PHP中完成?具体来说,我希望所有的是第一个索引(只有1个是,很多没有)

Array (
[0] => Array
    (
        [no] => Array
            (
                [0] => 379
            )

        [yes] => Array
            (
                [1] => 370
            )

    )

[1] => Array
    (
        [yes] => Array
            (
                [0] => 372
            )

    )

[2] => Array
    (
        [no] => Array
            (
                [0] => 377
            )

        [yes] => Array
            (
                [1] => 374
            )

    )

)

3 个答案:

答案 0 :(得分:1)

您可以使用uksort根据其键使用自定义比较函数对数组进行排序:

<?php
 function yesfirst($a, $b) {
  if ($a === 'yes') {
    return -1;
  } elseif ($b === 'yes') {
    return 1;
  } else {
    return 0;
  }
}

function uksort_yesfirst($ary) {
    uksort($ary, 'yesfirst');
    return $ary;
}

$array = array(
  0 => array( no => array(0 => 379), yes => array(1 => 370)),

  1 => array( yes => array( 0 => 372) ),

  2 => array( no => array( 0 => 377), yes => array( 1 => 374))
);

$array = array_map('uksort_yesfirst', $array);
print_r($array);
?>

答案 1 :(得分:0)

$ar = array(
    array(
        'no'  => array(0 => 379),
        'yes' => array(1 => 370)
    ),
    array(
        'yes' => array(0 => 372)
    ),
    array(
        'no'  => array(0 => 377),
        'yes' => array(1 => 374)
    )
);

usort($ar, function($a, $b){
    $v_a = array_values($a['yes']);
    $v_b = array_values($b['yes']);
    if($v_a[0] == $v_b[0]){
        return 0;
    }
    return $v_a[0] < $v_b[0] ? -1 : 1;
});

print_r($ar);

结果:

Array
(
    [0] => Array
        (
            [no] => Array
                (
                    [0] => 379
                )

            [yes] => Array
                (
                    [1] => 370
                )

        )

    [1] => Array
        (
            [yes] => Array
                (
                    [0] => 372
                )

        )

    [2] => Array
        (
            [no] => Array
                (
                    [0] => 377
                )

            [yes] => Array
                (
                    [1] => 374
                )

        )

)

答案 2 :(得分:0)

如果你的建议只是先显示'是'键,然后再显示'否'键,那么试试这个

function deep_krsort(&$arr) { 
    krsort($arr); 
    foreach ($arr as &$a) { 
        if (is_array($a) && !empty($a)) { 
            deep_krsort($a); 
        } 
    } 
} 

这将如何以相反的顺序改变你的内部深度元素