1

これは簡単だと思います。頭の中でこれをどのように行うべきかを整理しようとして混乱します。

問題の一般的な形式は次のようになります。

<?php 
$array_to_sort(
           0 => array(
                     'element1' => array(),
                     'PrimarySortKey' => int
                     'element2' => array(
                                        'SecondarySortKey' => int
                                         )
                     )
           1 => array(
                     'element1' => array(),
                     'PrimarySortKey' => int
                     'element2' => array(
                                        'SecondarySortKey' => int
                                         )
                     )

           n => array(
                     'element1' => array(),
                     'PrimarySortKey' => int
                     'element2' => array(
                                        'SecondarySortKey' => int
                                         )
                     )
           );
?>

このモデルから明らかでない場合は、PrimarySortKey等しいことが証明されない限り、目標は でソートすることです。等しい場合は でソートしSecondarySortKeyます。

PHP マニュアルを読むと、これは複雑なインスタンスかarray_multisort()関数array_walk()のどちらかであるという印象を受けますが、この種のことを理解することはできません。: /

私は誰かに私のために関数を書くように頼んでいるわけではありませんが、アプローチについて助けていただければ幸いです。ありがとう!

4

2 に答える 2

1

を使用した実装usort()は次のようになります。

function cmp($a, $b) {
    if ($a['PrimarySortKey'] == $b['PrimarySortKey']) {
        if ($a['element2']['SecondarySortKey'] == $b['element2']['SecondarySortKey']) {
           return 0;
        }
        return ($a['element2']['SecondarySortKey'] < $b['element2']['SecondarySortKey']) ? -1 : 1;
    }
    return ($a['PrimarySortKey'] < $b['PrimarySortKey']) ? -1 : 1;
}

usort($array_to_sort, 'cmp');
于 2013-04-19T18:38:48.370 に答える
1

関数PHP usortを見てください

作業例:

$arr = array(
        array('PrimarySortKey'=>30,'SecondarySortKey'=>3),
        array('PrimarySortKey'=>1,'SecondarySortKey'=>1),
        array('PrimarySortKey'=>30,'SecondarySortKey'=>9)
    );

    print_r($arr);

    usort($arr,function($a,$b){
       $key_a = $a['PrimarySortKey'];
       $key_b = $b['PrimarySortKey'];
        if($key_a == $key_b){
            $s_key_a = $a['SecondarySortKey'];   
            $s_key_b = $b['SecondarySortKey'];   

            return ($s_key_a < $s_key_b) ? -1 : 1;      
        }
        else{
            return ($key_a < $key_b) ? -1 : 1;      
        }

    });

    print_r($arr);

版画:

Array
(
    [0] => Array
        (
            [PrimarySortKey] => 30
            [SecondarySortKey] => 3
        )

    [1] => Array
        (
            [PrimarySortKey] => 1
            [SecondarySortKey] => 1
        )

    [2] => Array
        (
            [PrimarySortKey] => 30
            [SecondarySortKey] => 9
        )

)
Array
(
    [0] => Array
        (
            [PrimarySortKey] => 1
            [SecondarySortKey] => 1
        )

    [1] => Array
        (
            [PrimarySortKey] => 30
            [SecondarySortKey] => 3
        )

    [2] => Array
        (
            [PrimarySortKey] => 30
            [SecondarySortKey] => 9
        )

)
于 2013-04-19T18:33:50.623 に答える