ホームページ  >  記事  >  バックエンド開発  >  PHPの配列ソート関数array_multisort()関数の詳細説明

PHPの配列ソート関数array_multisort()関数の詳細説明

不言
不言オリジナル
2018-04-26 11:34:262389ブラウズ

この記事では、PHP 配列のソート関数 array_multisort() 関数の詳細な説明を紹介します。これには特定の参考値がありますので、必要な方は参考にしてください。

array_multisort() この関数は、複数の PHP 配列をソートできます。並べ替えると、並べ替えの結果、すべての配列が最初の配列の順序で配置されます。これは実際には少し混乱するので、これだけを言っても理解できないでしょう。まず例を見てみましょう:

例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元
素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边
的程序运行结果:

$a =array(100,80,50,10,0);
$b = array("c","f","q","e","z");
array_multisort($a,$b);
var_dump($a);
var_dump($b);

运行结果:
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” }


其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它
数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第
二位……——其实这个多维数组排序算法的最基本体现!
  • ただし、2 つの配列の要素の数は同じである必要があることに注意してください。そうでない場合は、警告メッセージが表示されます

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

//让我们来构造一个多维数组
$a=array(100,2,4,7,7);
$b=array('ab','ac','ad','ag','ap');

$ab = array($a,$b);
//开始排序
array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[1],SORT_STRING,SORT_ASC);
print_r($ab);

说明一下:首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC声
明顺序是逆序(从大到小),然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序)

最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同
的数值则按照$ab[1]的顺序排列,输出结果如下:

Array (
    [0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
    [1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
)

それでは見てみましょう。より実践的なアプリケーションに近い例を見てください:

$array[] = array("age"=>20,"name"=>"li");
$array[] = array("age"=>21,"name"=>"ai");
$array[] = array("age"=>20,"name"=>"ci");
$array[] = array("age"=>22,"name"=>"di");

foreach ($array as $key=>$value){
     $age[$key] = $value['age'];
     $name[$key] = $value['name'];
}

array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array);
print_r($array);

この例の $array[] 配列は、データベースから読み取られたレコードに基づいて構築されています。年齢が同じ場合は名前順にソートされます。この種の並べ替えは、将来よく使用されるものです

array_multisort() で必要な並べ替えパラメーターは列である必要があるため、foreach を使用してこの配列の年齢と名前を読み出します。 次に何が起こるでしょうか。

就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要
声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有
关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需
要列,还没见过用行数据进行排序的呢!

出力結果は次のとおりです - 私たちが考えていたとおりです:

Array (
    [0] => Array ( [age] => 22 [name] => di )
    [1] => Array ( [age] => 21 [name] => ai )
    [2] => Array ( [age] => 20 [name] => ci )
    [3] => Array ( [age] => 20 [name] => li )
)

ほら、これは実際には非常に単純ですが、大文字にする必要があるいくつかのパラメータが少し面倒なだけです。少しわかりにくいですが、理解しておけば将来とても役に立ちます!

array_multisort(array1,ソート順序,ソートタイプ,array2,array3…)

  • ソート順序はオプションです。並べ替えの順序を指定します。可能な値:

    SORT_ASC - デフォルト。昇順 (A から Z) に並べ替えます。
    SORT_DESC - 降順 (Z-A) で並べ替えます。

  • 並べ替えタイプはオプションです。並べ替えの種類を指定します。可能な値:

    SORT_REGULAR - デフォルト。各項目を規則的な順序で配置します (標準 ASCII、タイプを変更しないでください)。
    SORT_NUMERIC - 各項目を数値として扱います。
    SORT_STRING - 各項目を文字列として扱います。
    SORT_LOCALE_STRING - 現在のロケール (setlocale() で変更可能) に基づいて、各項目を文字列として扱います。
    SORT_NATURAL - natsort() のような自然な並べ替えを使用して、各項目を文字列として扱います。
    SORT_FLAG_CASE - SORT_STRING または SORT_NATURAL と (ビットごとの OR) を組み合わせて、大文字と小文字を区別せずに文字列を並べ替えることができます。

関連する推奨事項:

php array sort usort uksort sort function


以上がPHPの配列ソート関数array_multisort()関数の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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