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

あなたの提案が最初に「はい」キーを表示し、後で「いいえ」キーを表示するだけの場合は、これを試してください

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 に答える
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 に答える