MySQLクエリからPHPに$ result変数があります& 2つの異なる列に並べ替えることにしました。MySQLクエリをやり直さなくてもPHPの2列にソート
私はいつでもユーザーが別のソート方法をクリックするので、毎回ORDER BY ....でMySQLクエリをやり直す必要はありません。
MySQLクエリからPHPに$ result変数があります& 2つの異なる列に並べ替えることにしました。MySQLクエリをやり直さなくてもPHPの2列にソート
私はいつでもユーザーが別のソート方法をクリックするので、毎回ORDER BY ....でMySQLクエリをやり直す必要はありません。
MySQLで注文するのが効率的ですが、PHPで実行したい場合は、usortをチェックしてください。コールバック関数を使用して配列を並べ替えることができます。
あなたの$結果が連想データベース行の配列である場合は、ここでは文字列の列「foo」でにソートするusortを使用して、非常に単純な例だ...
//sort on string column
function sortStringFoo($a, $b)
{
return strcmp($a['foo'], $b['foo']);
}
usort($result, 'sortStringFoo');
は、ここであなたがしたい方法です数値ソート...
//sort on numeric column
function sortNumericBar($a, $b)
{
if ($a['bar'] == $b['bar']) {
return 0;
}
return ($a['bar'] < $b['bar']) ? -1 : 1;
}
usort($result, 'sortNumericBar');
これはusortの使用方法の基本を示していますが、複数の列を一度に並べ替える方法はありますか?ここでは、...「foo」とし、「バー」上にソートすることにより、これを説明するために私たちの比較コールバックを組み合わせることができる方法だ
function sortFooBar($a,$b)
{
$order=sortStringFoo($a,$b);
if ($order==0)
$order=sortNumericBar($a,$b);
return $order;
}
usort($result, 'sortFooBar');
あなたは、単一の関数に
sortFooBar
をアンロールことができますが、これは技術を示し
:最初の列を比較します、同じ場合は2番目の列を比較します。
テーブルのすべての列を別々の列に分割し、次にarray_multisort
(例3の通知)を実行することで、これを実現できます。ここではテストケースである:
<?php
$arr = array(
array(
'name' => 'Maria',
'surname' => 'White',
'age' => 24
),
array(
'name' => 'John',
'surname' => 'Brown',
'age' => 32
),
array(
'name' => 'John',
'surname' => 'Brown',
'age' => 33
)
);
$names = array();
$surnames = array();
$ages = array();
foreach($arr as $key => $row){
$names[$key] = $row['name'];
$surnames[$key] = $row['surnames'];
$ages[$key] = $row['age'];
}
// perform any sorting task you like
array_multisort($names, SORT_ASC, $surnames, SORT_ASC, $ages, SORT_DESC, $arr);
print_r($arr);
?>
出力は次のようになります。
Array
(
[0] => Array
(
[name] => John
[surname] => Brown
[age] => 33
)
[1] => Array
(
[name] => John
[surname] => Brown
[age] => 32
)
[2] => Array
(
[name] => Maria
[surname] => White
[age] => 24
)
)
あなたは配列にあなたの列を分割する場合は、あなたが任意の方向に任意の列でソートする力を持っています。
@グリフ:どうぞよろしく!私の答えがあなたの問題を解決したら、私の答えの左側にある投票数の下のチェックをクリックして、それを受け入れることを検討してください。:) – Shef
このテクニックは小さな配列では問題ありませんが、大きなものであれば、それらのセカンダリ配列にデータを複製するだけで無駄なので、array_multisortを使うことができます。 usortを使用すると、そのような重複がなくても、ソートは「インプレース」で行われます。 –
@Paul Dixon:リソースの少ない空腹のソリューションを提供してください。私はそれを見てうれしいです。あなたの答えにあなたが提供する解決策は正確ではありません。試して。 – Shef
テーブルにはいくつの列がありますか? – Shef
6つの列があります。 – Glyph
私はあなたに3つの列の答えを与えました。 6つの列に合わせて調整できない場合は、列名を示すように回答を編集してください。 – Shef