0

我有一个需要按“是”和“否”键排序的数组 - 如何在 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
            )

    )

)
4

3 回答 3

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);
?>
于 2012-05-17T17:59:10.803 回答
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
                )

        )

)
于 2012-05-17T18:04:18.377 回答
0

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

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

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

于 2012-05-17T18:16:02.133 回答