array_multisort 多次元配列のソートを使用するための PHP 命令_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:33:07
オリジナル
806 人が閲覧しました

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

コードをコピー コードは次のとおりです:

$arr1 = array(1,9,5)
$arr2 = array(6,2,4); ($arr1 ,$arr2);
print_r($arr1); // 取得された次数は 1,5,9 です
print_r($arr2) // 取得された次数は 6,4,2 です
2 つの配列 値は全体で対応しています。1 は 6 に対応し、9 は 2 に対応し、5 は 4 に対応します。
もう 1 つの配列を追加して、何が起こるか見てみましょう:



コードをコピーします
コードは次のとおりです: $arr1 = array(1,9,5);
$arr2 = array(6,2) ,4) ;
$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); $arr2 = array( 6,2,4, 1);
$arr3 = array(3,7,8,0);

ここでの結果は次のようになります。は (3,8,0,7 ) です。

2. 次にarray_multisortのパラメータについて説明します。
この関数のパラメータは非常に柔軟です。最も単純なケースは、上記のように 1 または n 個の配列をパラメーターとして使用することです。各配列内の項目の数が同じである必要があることに注意してください。そうでない場合は、警告が表示されて並べ替えが失敗します。
このように array_multisort($arr1,$arr2,$arr3); デフォルトでは、$arr2 を降順に並べ替えて文字列として比較する場合は、次のように記述する必要があります。 ($arr1, $ arr2, SORT_DESC, SORT_STRING, $arr3);
各配列の後にソート順序フラグまたはソート タイプ フラグを続けることができ、または両方のフラグを同時に指定することもできます。ただし、各配列の後に指定できるのは、各タイプのソート フラグ 1 つだけです。
詳細は次のとおりです:
ソート順序フラグ: SORT_ASC - 昇順でソート (デフォルト)
SORT_DESC - 降順でソート

ソートタイプフラグ:

SORT_REGULAR - 通常の方法で項目を比較 (デフォルト)
SORT_NUMERIC - 降順で並べ替えます 数値に基づいて項目を比較します
SORT_STRING - 文字列に基づいて項目を比較します


3. 最後に、array_multisort の実際的な効果は何ですか?

通常、ソートが必要な多次元配列がいくつかあります:
$guys = Array
(
[0] => Array
( [name] => jake [score] => 80
[成績] => A
)
[1] => 配列
(
[名前] => ジン
[スコア] => 70
[成績] => A
)
[2] = > 配列
(
[名前] => ジョン
[スコア] => 80
[成績] => A
)
[3] => 配列
(
[名前] => ベン
[スコア] => ;
[成績] => B
)
)
たとえば、成績が同じ場合は、名前で昇順に並べ替えたいとします。現時点では、$guys の順序に従ってさらに 2 つの配列を作成する必要があります: $scores = array(80,70,80,20);$names = array('jake','jin','john',' ben ');それから array_multisort($scores, SORT_DESC, $names, $guys); ソートするたびに追加の配列を取得する必要がありますか?実際、これは qeephp の helper_array クラスにうまくカプセル化されています。必要な方は、次の 2 つのメソッドを変更できます:



コードをコピーします

コードは次のとおりです。

/**
* 指定に基づく键对数組排序
*
* 使用法:
* @code php
* $rows = array(
* array('id' => 1, 'value' => '1-1' 、'親' => 1)、
* 配列('id' => 2、'値' => '2-1'、'親' => 1)、
* 配列('id' => 3, '値' => '3-1', '親' => 1),
* 配列('id' => 4, '値' => '4-1', '親' => 2),
* 配列('id' => 5, '値' => '5-1', '親' => 2),
* 配列('id' = > 6, '値' => '6-1', '親' => 3),
* );
*
* $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC);
* ダンプ($rows);
* // 出力結果:
* // array(
* // array('id' => 6, 'value' => '6-1', 'parent' => 3),
* // array('id' => 5, 'value' => '5-1', 'parent' => 2),
* // array('id' => 4, 'value ' => '4-1', '親' => 2),
* // 配列('id' => 3, '値' => '3-1', '親' => ; 1),
* // array('id' => 2, 'value' => '2-1', 'parent' => 1),
* // array('id' => ; 1, 'value' => '1-1', 'parent' => 1),
* // )
* @endcode
*
* @param array $array 要排序の数组string $keyname 排序的键
* @param int $dir 排序方向
*
* @return array 排序後の数组
*/
静的関数 sortByCol($array, $keyname, $dir = SORT_ASC)
{
return self::sortByMultiCols($array, array($keyname => $dir));
} /**
* SQL ステートメントの ORDER BY と同様に、2 次元配列を複数の列でソートします
*
* 使用法:
* @code php
* $rows = Helper_Array::sortByMultiCols($rows, array(
* 'parent' => SORT_ASC,
* 'name' =>SORT_DESC,
* ));
* @endcode
*
* @param array $rowset ソートする配列
* @param array $args *
* @return array ソートされた配列
*/
静的関数 sortByMultiCols($rowset, $args)
{
$sortArray = array();
$sortRule = ''; $args as $sortField => sortDir)
{
foreach ($rowset as $offset => $row)
{
$sortArray[$sortField][$offset] = $row[$sortField]
}
$sortRule .= '$sortArray[ '' . $sortField . ''] . ', ';
if ($sortArray) || empty($sortRule) { return $rowset(' . $sortRule .'$rowset);');
$rowset;



http://www.bkjia.com/PHPjc/322693.html

www.bkjia.com
tru​​e
http://www.bkjia.com/PHPjc/322693.html

技術記事 1. まず最も単純なケースを見てみましょう。 2 つの配列があります。 コードのコピー コードは次のとおりです。 $arr1 = array(1,9,5); $arr2 = array(6,2,4); ); // わかりました...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート