1

次の配列があります。

$data['array'] = array(
    1 => array(
        'currency_name' => 'USD',
        'totals' => '310.00 USD'
    ),
    24 => array(
        'currency_name' => 'EUR',
        'totals' => '200.00 EUR'
    ),
    26 => array(
        'currency_name' => 'GBP',
        'totals' => '100.00 GBP'
    )
);

キーでソートしたかったのでcurrency_name、次の関数を使用しました。

// sort the array by currency_name key
$sort = array();
foreach ($data['array'] as $i => $row)
{
    $sort[$i] = $row['currency_name'];
}
array_multisort($sort, SORT_NATURAL, $data['array']);

出力:

Array
(
    [array] => Array
        (
            [0] => Array
                (
                    [currency_name] => EUR
                    [totals] => 200.00 EUR
                )

            [1] => Array
                (
                    [currency_name] => GBP
                    [totals] => 100.00 GBP
                )

            [2] => Array
                (
                    [currency_name] => USD
                    [totals] => 310.00 USD
                )

        )

)

期待される:

Array
(
    [array] => Array
        (
            [24] => Array
                (
                    [currency_name] => EUR
                    [totals] => 200.00 EUR
                )

            [26] => Array
                (
                    [currency_name] => GBP
                    [totals] => 100.00 GBP
                )

            [1] => Array
                (
                    [currency_name] => USD
                    [totals] => 310.00 USD
                )

        )

)

これは配列のインデックスを再作成していますが、これは望ましくありません。後でそれらのキーが必要です。

注:
* 上記で使用した方法は次のとおりです。 *この関数は他の文字列にも使用する
ので必要です。SORT_NATURAL

4

2 に答える 2

7

ドキュメントから読み取れるようarray_multisortに、連想 (文字列) キーのみが保持されます。代わりに使用できますuasort

uasort($data['array'], function($a, $b) {
    return strnatcmp($a['currency_name'], $b['currency_name']);
});
于 2013-09-27T07:37:50.187 に答える
1

natcasesort($array)関数を試すことができます。この関数は、大文字と小文字を区別しない「自然順序」アルゴリズムを使用して配列を並べ替えます。成功すると TRUE を返し、失敗すると FALSE を返します。

于 2013-09-27T07:45:23.083 に答える