-3

$mainArr 配列があり、結果を $resultArr にしたい。

$mainArr = array(
            0 => array(125 => 'B', 127 => 'A', 178 => 'Z', 78 => 'G'),
            1 => array(111 => 'X', 127 => 'K', 108 => 'J', 708 => 'P'),
            2 => array(125 => 'L', 127 => 'M', 178 => 'Q', 78 => 'A'),
    );

以下のような結果が欲しい:

$resultArr = array(
        0 => array(127 => 'A', 125 => 'B', 78 => 'G', 178 => 'Z', ),
        1 => array(108 => 'J', 127 => 'K', 708 => 'P', 111 => 'X',),
        2 => array(78 => 'A', 125 => 'L', 127 => 'M', 178 => 'Q'),
    );
4

6 に答える 6

1
$mainArr = array_map( function( $a ){
    uksort( $a, function( $b, $c ) use( $a ){
        return $a[$b] > $a[$c];
    });
    return $a;
}, $mainArr );
于 2015-06-26T13:27:01.600 に答える
1

array_map 関数を使用して、多次元配列を並べ替えることができます。

上記の配列をソートするには、次のようなものを使用できます。

function sortArr($a) {
    natsort($a);
    return $a;
}

$mainArr = array(0 => array(125 => 'B', 127 => 'A', 178 => 'Z', 78 => 'G'),
            1 => array(111 => 'X', 127 => 'K', 108 => 'J', 708 => 'P'),
            2 => array(125 => 'L', 127 => 'M', 178 => 'Q', 78 => 'A'),
    );

$sortedArr = array_map( "sortArr", $mainArr);

以下の出力が得られます

Array
(
    [0] => Array
        (
            [127] => A
            [125] => B
            [78] => G
            [178] => Z
        )

    [1] => Array
        (
            [108] => J
            [127] => K
            [708] => P
            [111] => X
        )

    [2] => Array
        (
            [78] => A
            [125] => L
            [127] => M
            [178] => Q
        )

)
于 2015-06-26T13:24:13.627 に答える
0

ここにあなたが探しているものと思われるStackOverflowの答えがあります:PHPで多次元配列をソートする. カスタム比較関数を定義し、それ (および並べ替えたい配列) を引数としてuasortに渡す必要があります。これにより、キーと値のペア間の関連付けが維持されます。注: 各行を並べ替えたいので、おそらく次のように各行を並べ替えます。

function cmp($a, $b) {
    return strcmp($a, $b); // also look into strnatcmp()

function sortArray($mainArr) {
    $resultArr = array();
    foreach (array $arr in $mainArr)
        $resultArr[] = uasort($arr, 'cmp'); // append the new row to $resultArr
    return $resultArr;
}

今後の参考のために、(Burak が述べたように) 質問をする前に、Google で広範囲に検索することをお勧めします (特にこの分野で習得する価値のあるスキル)。このようにして、人々はより効果的なフィードバックや提案を提供できます。

于 2015-06-26T13:24:23.573 に答える
-1

もちろんできます。

次のように実行できます。

$resultArr = [];
foreach ($mainArr as $m){
    asort($m);
    $resultArr[] = $m;
}
var_dump($resultArr);

良い1日を。

于 2015-06-26T13:39:18.230 に答える