ホームページ  >  記事  >  バックエンド開発  >  多次元配列を特定のキーでソートするにはどうすればよいですか?

多次元配列を特定のキーでソートするにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 13:39:09911ブラウズ

例:

$arr=array();$arr[]=array('id'=>88,'val'=>'xxx');$arr[]=array('id'=>188,'val'=>'xxx');$arr[]=array('id'=>81,'val'=>'xxx');$arr[]=array('id'=>388,'val'=>'xxx');

IDで降順に配列を再ソートしたい


ディスカッションに返信(解決策)

自分で解決しました... Scatter

foreach($arr as $key=>$row){	$cs[$key] = $row['cs'];	$val[$key] = $row['val'];}array_multisort($cs,SORT_DESC,$val,SORT_ASC,$arr);

まだ何かあります質問するには、このメソッドを使用してください。 解決しました。array_multisort 関数の仕組みがよくわかりません。

array_multisort では、ソートに参加する配列の最初の次元の数が、左から右に優先して実行される必要があります。

array_multisort はソート時に同時に参加を交換する


array_multisort を実装できます。

1. まず最も単純な状況を見てみましょう。 2 つの配列があります:

$arr1 = array(1,9,5);

array_multisort($arr1,$arr2); ; // 取得した次数は 1,5,9
print_r($arr2); // 取得した次数は 6,4,2

2 つの配列の値は最初から一致していると推定します。終了: 1 は 6 に対応し、9 は 2 に対応し、5 は 4 に対応します。

配列をもう 1 つ追加して、何が起こるかを見てみましょう:

$arr1 = array(1,9,5);
$arr3 = array(3,7, 8); );

array_multisort($arr1,$arr2,$arr3);

結果を見ると、最初から最後まで 1 が 6 と 3 に対応しており、他の項目も同様です。この対応は、マニュアルでは「ソート中に元のキー名の関連付けを保持する」と呼ばれるものです。

あるいは、各配列をデータベース テーブルの列として考えることもできます。対応する 1、6、3 は 1 つのデータ行であり、9、2、7 は別のデータ行です。 。 。

array_multisort は、最初に最初の配列 (列として想像してください) でソートし、最初の配列 (列) の値が同じであれば、2 番目の配列 (列) でソートします。

具体的には、次のプログラムを使用してテストできます。

$arr1 = array(1,9,5,9);
$arr3 = array( 3, 7,8,0);

array_multisort($arr1,$arr2,$arr3);

ここでの $arr3 の結果は (3,8,0,7) であると想像できます。

2. 次にarray_multisortのパラメータについて説明します。この関数のパラメータは非常に柔軟です。最も単純なケースは、上記のように 1 または n 個の配列をパラメーターとして使用することです。各配列内の項目の数が同じである必要があることに注意してください。そうでない場合は、警告が表示されて並べ替えが失敗します。

このように array_multisort($arr1,$arr2,$arr3); デフォルトでは、すべての配列が昇順に並べられます。 $arr2 を降順に並べ替えて文字列として比較したい場合は、次のように記述する必要があります。 array_multisort($arr1 , $arr2, SORT_DESC, SORT_STRING, $arr3);

各配列の後にソート順序フラグまたはソート タイプ フラグを続けることができ、または両方のフラグを同時に指定することもできます。ただし、各配列の後に指定できるのは、各タイプのソート フラグ 1 つだけです。

詳細は次のとおりです:

並べ替え順序フラグ:

SORT_ASC - 昇順で並べ替え (デフォルト)

SORT_DESC - 降順で並べ替え

テスト: http://zhidao.baidu.com/question/213141342。 html

$ids = array();
foreach ($result as $j) {
$ids[] = $j['rid'] }
array_multisort($ids, SORT_DESC, $result);並べ替え

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。