0

私はこの $countries 配列を持っています:

Array ( [0] => 2013 Germany [1] => country [2] => Berlin [3] => Beer)
Array ( [0] => 2012 Italy [1] => country  [2] => Rome [3] => Wine  )
Array ( [0] => 2013 Germany [1] => country  [2] => Munich [3] => Beer )
Array ( [0] => 2013 Germany [1] => country  [2] => Dusseldorf [3] => Beer )
Array ( [0] => 2013 Italy [1] => country  [2] => Venice [3] => Wine )
Array ( [0] => 2013 Russia ....) etc

年の昇順で並べ替えたいので、次のようになります

Array ( [0] => 2012 Italy [1] => country  [2] => Rome [3] => Wine  )
Array ( [0] => 2013 Germany [1] => country [2] => Berlin [3] => Beer)
Array ( [0] => 2013 Germany [1] => country  [2] => Munich [3] => Beer )....

sortasort、およびnatsortを試しましたが、これまでのところどれも機能していないようです。

何か案は?

4

4 に答える 4

1
foreach ($countries as $key => $row) {
    $year[$key]  = $row[0];
}


array_multisort($year, SORT_ASC, $countries);
于 2013-09-18T13:31:26.073 に答える
1

array_multisort関数で多次元配列をソートする必要があります。

最初に並べ替え配列を準備する必要があり、次に並べ替え自体を適用します。

$sortArr = array();

// prepare the sorting array
foreach ($arrayToSort as $row) {
  $sortArr[] = $row[0];  // put there the year value
}

// sorting - first param is helper array, then constant with sorting direction, third param is array you wish to sort
array_multisort($sortArr, SORT_ASC, $arrayToSort);
于 2013-09-18T13:31:48.677 に答える
1

usort を使用してみてください。ドキュメントの例 #2 を見てください ( http://www.php.net/manual/en/function.usort.php ):

例2 多次元配列を使用した usort() の例

<?php
function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
    echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>

多次元配列をソートする場合、$a と $b には配列の最初のインデックスへの参照が含まれます。上記の例では、次のように出力されます。

$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons
于 2013-09-18T13:41:57.440 に答える
0

配列をコピーして、次のようにキー値なしで作成しました。

$test = array (Array (  '2013 Germany',  'country',  'Berlin ', 'Beer'),
Array (  '2012 Italy' , 'country'  , 'Rome',  'Wine'  ),
Array (  '2013 Germany' , 'country' ,  'Munich' ,  'Beer' ),
Array (  '2013 Germany',  'country' ,  'Dusseldorf',  'Beer' ),
Array (  '2013 Italy' , 'country' ,  'Venice' , 'Wine' )
);

その後、私は使用しています:

asort($test);
$test = array_values($test);    
print_r($test);

そして、出力は次のとおりです。

Array
(
    [0] => Array
        (
            [0] => 2012 Italy
            [1] => country
            [2] => Rome
            [3] => Wine
        )

    [1] => Array
        (
            [0] => 2013 Germany
            [1] => country
            [2] => Berlin 
            [3] => Beer
        )

    [2] => Array
        (
            [0] => 2013 Germany
            [1] => country
            [2] => Dusseldorf
            [3] => Beer
        )

    [3] => Array
        (
            [0] => 2013 Germany
            [1] => country
            [2] => Munich
            [3] => Beer
        )

    [4] => Array
        (
            [0] => 2013 Italy
            [1] => country
            [2] => Venice
            [3] => Wine
        )

)

この出力を探していることを願っています。

于 2013-09-18T13:42:24.070 に答える