ホームページ >バックエンド開発 >PHPチュートリアル >PHPで多次元配列をソートする方法を学ぶ

PHPで多次元配列をソートする方法を学ぶ

WBOY
WBOYオリジナル
2016-07-25 09:07:291198ブラウズ
  1. $a =array(100,80,50,10,0);
  2. $b = array("c","f","q","e","z ");
  3. array_multisort($a,$b);
  4. var_dump($a);
  5. var_dump($b);
  6. ?>
コードをコピー

結果を実行します。 array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) } array(5) { [0]=> string(1) “z” [1]=> string(1) “e” [2]=> string(1) “q” [3]=> string(1) "f" [4]=> string(1) "c" }

明らかに、もともと配列 b の 5 番目の要素だった z が最初にランク付けされました。

実際、明確にするために、array_multisort() は最初にキー値のサイズに従って最初の配列を並べ替え、次に最初の配列の調整戦略に従って他の配列を調整します。3 番目の要素が最初に配置され、 2 つの要素を 2 番目の位置に配置します...——実際、これは、この多次元配列ソート アルゴリズムの最も基本的な実施形態です。

ただし、2 つの配列の要素の数は同じである必要があることに注意してください。同じでない場合は、警告メッセージが表示されます。 警告: array_multisort() [function.array-multisort]: 配列のサイズが ……

で矛盾しています

さて、ここで重要なことについて話しましょう。array_multisort() は多次元配列をソートします。この関数は将来プロジェクトを実行するときに非常に役立ちます。

まず、多次元配列の各要素 [配列] をソートする操作方法を見てみましょう。非常に簡単ですが、SQL についてある程度の知識がある場合は、説明する必要があるパラメーターがいくつかあります。おそらく一目で理解できるでしょう:

  1. //多次元配列を構築しましょう
  2. $a=array(100,2,4,7,7);
  3. $b=array('ab','ac ' ,'ad','ag','ap');
  4. $ab = array($a,$b);
  5. //並べ替え開始
  6. array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[ 1 ],SORT_STRING,SORT_ASC);
  7. print_r($ab);
  8. ?>
コードをコピー
説明: まず、SORT_NUMERIC を使用して $ab[0] が数値型でソートされていることを宣言し、 SORT_DESC 宣言順序は逆順(大きい順)で、$ab[1]を文字列型でソートし、昇順(order)とします。 配列 $ab の最終的なソート結果は、この 2 つを組み合わせたものになります。まず、$ab[0] に同じサイズの値があれば、それらをソートします。 $ab[1]の順で出力されます。 配列 ( [0] => 配列 ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 ) [1] => 配列 ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac ) ) データベースで order by を使用するのとよく似ていますか?実は、ほぼ同じなんです!

次に、より実用的な例を見てみましょう:

  1. $array[] = array("年齢"=>20,"名前"=>"li");
  2. $array[] = array("年齢"=> ;21,"名前"=>"ai");
  3. $array[] = array("年齢"=>20,"名前"=>"ci");
  4. $array[] = array(" age"=>22,"name"=>"di");
  5. foreach ($array as $key=>$value){
  6. $age[$key] = $value['age'];
  7. $name[$key] = $value['name'];
  8. }
  9. array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array);
  10. print_r($array);
  11. ?> ;
コードをコピー

この例の $array[] 配列は、データベースから読み取られたレコードに基づいて構築されています。年齢が同じ場合は、名前の順に並べ替えられます。 。この種の並べ替えは、今後よく使用されるものになります。 array_multisort() で必要な並べ替えパラメータは列である必要があるため、foreach を使用してこの配列の年齢と名前を読み取ります。 上の例と同様に、ソートの場合は、最後のパラメーター $array を参照する必要があります。最初の 2 つのパラメーターは、ソートする必要がある PHP 配列とは関係がないため、ソートする配列を宣言する必要があります。実際にはそれらは $array 内のデータ ($array から抽出した列) ですが、ソートには当然列が必要ですが、ソートに行データが使用されるのを見たことがありません。

出力は次のとおりです - 私たちが考えたとおりです: 配列 ( [0] => 配列 ( [年齢] => 22 [名前] => di ) [1] => 配列 ( [年齢] => 21 [名前] => ai ) [2] => 配列 ( [年齢] => 20 [名前] => ci ) [3] => 配列 ( [年齢] => 20 [名前] => li ) )

ご存知のとおり、これは実際には非常に単純ですが、大文字にする必要があるいくつかのパラメーターが少し面倒なだけです。少しわかりにくいですが、理解しておけば将来とても役に立ちます! 付録: ソート順序フラグ: SORT_ASC – 昇順で並べ替えます SORT_DESC – 降順で並べ替えます

ソートタイプフラグ: SORT_REGULAR – 通常の方法で項目を比較します SORT_NUMERIC – 項目を数値的に比較します SORT_STRING – 項目を文字列で比較します

同じ型の 2 つの並べ替えフラグを各配列の後に指定することはできません。各配列の後に指定されたソート フラグは、その配列に対してのみ有効です。それ以前は、デフォルト値 SORT_ASC および SORT_REGULAR が使用されていました。 もう 1 つの注目すべき点は、この関数は数値インデックスを変更し、他のインデックスは変更しないことです。

>>> 詳細については、PHP 配列ソートメソッドの完全なリストをご覧ください



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