複数の列の配列を並べ替えることができるようになりました。さらに複雑にするために、キー/列ごとに特定のソートオプションを設定できるようにしたいと考えています。私は、DBクエリの結果と似ているが、実際には1つではないので、SQLではなくPHPでソートする必要がある。指定された並べ替えオプションを使用して2つ以上の "列"(キー)に複数の配列の並べ替えを並べ替え
Array
(
[0] => Array
(
[first_name] => Homer
[last_name] => Simpson
[city] => Springfield
[state] => Unknown
[zip] => 66735
)
[1] => Array
(
[first_name] => Patty
[last_name] => Bouvier
[city] => Scottsdale
[state] => Arizona
[zip] => 85250
)
[2] => Array
(
[first_name] => Moe
[last_name] => Szyslak
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[3] => Array
(
[first_name] => Nick
[last_name] => Riviera
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
)
これは、DBクエリで実行できるものと同様に並べ替えることができます。ああ、時には列/キーを番号で指定する必要がある場合もあります。私が念頭に置いていた何
は、これに似たものでした:
Array
(
[0] => Array
(
[first_name] => Nick
[last_name] => Riviera
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[1] => Array
(
[first_name] => Moe
[last_name] => Szyslak
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[2] => Array
(
[first_name] => Patty
[last_name] => Bouvier
[city] => Scottsdale
[state] => Arizona
[zip] => 85250
)
[3] => Array
(
[first_name] => Homer
[last_name] => Simpson
[city] => Springfield
[state] => Unknown
[zip] => 66735
)
)
UPDATE:私が思う理想的に、Aという私がで終わるしたい何
$sortOptions = array(array('city', SORT_ASC, SORT_STRING),
array('zip', SORT_DESC, SORT_NUMERIC),
array(2, SORT_ASC, SORT_STRING) // 2='last_name'
);
$sorter = new MultiSort($data, $sortOptions);
$sortedData = $sorter->getSortedArray() ;
print_r($jmsSorted);
これがありますソリューションは動的に作成されます
array_multisort($city, SORT_ASC, SORT_STRING, $zip, SORT_DESC, SORT_NUMERIC, $last_name, SORT_ASC, SORT_STRING, $inputArray);
問題は、そこにキー名を「ハードコード」したくないということです。私はに基づいてソリューションを作成しようとしました。例3 array_multisort()
を使用して終了したarray_multisort()
のドキュメントからをソートしましたが、array_multisort()
の動的に作成された引数リストを使用する方法を見つけることができません。
私の試みは、あなたがusortを使用しようとする場合があります
Warning: Parameter 2 to array_multisort() expected to be a reference, value given in...
私は1つの "正しい"答えを持っていないことに同意しますが、これは私のニーズにもかなり近くなりますが、インデックス配列をソートする必要があるという例外があります。 –
このコードを使用して、「警告:usort():配列がユーザー比較関数によって変更されました」というメッセージが表示されます。私は次の説明を見つけた、私はそれを修正することができますコメント:http://stackoverflow.com/questions/3235387/usort-array-was-modified-by-the-user-comparison-function – vicenteherrera