ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルで 2 次元配列をソートするいくつかの方法

php_PHP チュートリアルで 2 次元配列をソートするいくつかの方法

WBOY
WBOYオリジナル
2016-07-13 10:43:42802ブラウズ

2 次元配列のソート PHP では、直接ソートできる関数 array_multisort も提供しています。配列のソートに array_multisort を使用することに加えて、カスタムの 2 次元配列のソート メソッドもいくつか作成したことを紹介します。

特定の目的を達成するために、2 次元配列をソートする必要がある場合があります。その方法を説明します。

さらに、array_multisort 関数も非常に強力です。詳細については、非常に詳細な PHP マニュアルを参照してください。


array_multisort() 関数を使用できます。 array_multisort() 関数は、複数の配列または多次元配列をソートします。

パラメータ内の配列はテーブルの列として扱われ、行ごとに並べ替えられます。これは SQL の ORDER BY 句の機能と似ています。最初の配列は、ソートされるメインの配列です。配列内の行 (値) が同じである場合、次の入力配列内の対応する値のサイズに従って並べ替えられます。

最初のパラメータは配列であり、後続の各パラメータは配列または次の並べ替え順序フラグのいずれかになります (並べ替えフラグはデフォルトの並べ替え順序を変更するために使用されます):

•SORT_ASC - デフォルト、昇順で並べ替えます。 (A-Z)
•SORT_DESC - 降順に並べ替えます。 (Z-A)
次に、並べ替えの種類を指定できます:

•SORT_REGULAR - デフォルト。各項目を規則正しい順序で並べます。
•SORT_NUMERIC - 各項目を数値順に並べ替えます。
•SORT_STRING - 各項目をアルファベット順に並べ替えます。
構文: array_multisort(配列1,ソート順序,ソートタイプ,配列2,配列3...)

•array1: 必須。入力配列を指定します。
•並べ替え順序: オプション。並べ替えの順序を指定します。可能な値は SORT_ASC と SORT_DESC です。
•ソートタイプ: オプション。並べ替えの種類を指定します。可能な値は、SORT_REGULAR、SORT_NUMERIC、および SORT_STRING です。
•array2: オプション。入力配列を指定します。
•array3: オプション。入力配列を指定します。
文字列キー名は保持されますが、数値キーは 0 から始まり 1 ずつ増加して再インデックスされます。並べ替え順序と並べ替えの種類は、各配列の後に設定できます。設定されていない場合、各配列パラメーターはデフォルト値を使用します。

ここに例があります:

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

$arr=配列 (
'1' => 配列 ( 'date' => '2011-08-18', 'num' => 5 ) 、
'2' => 配列 ( 'date' => '2011-08-20', 'num' => 3 ) 、
'3' => 配列 ( 'date' => '2011-08-17', 'num' => 10 )
) ; $result = sysSortArray($arr,'num');このように実行した後の効果は次のとおりです:

$arr=配列 (
'1' => 配列 ( 'date' => '2011-08-18', 'num' => 3 ) 、
'2' => 配列 ( 'date' => '2011-08-20', 'num' => 5 ) 、
'3' => 配列 ( 'date' => '2011-08-17', 'num' => 10 )
) ; 使用される関数:

/**
 * @package 二维数组排序
 * @version $Id: FunctionsMain.inc.php,v 1.32 2011/09/24 11:38:37 wwccss Exp $
 *
 *
 * レベル 2 の項目ごとに 2 次元配列をソートするには、array_multisort() 関数を使用します。
 *
 * sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2";……)
 * @作者 ランプ100
 * @param 配列 $ArrayData 並べ替える配列
 * @param 文字列 $KeyName1 並べ替えの最初の項目。
 * @param 文字列 $SortOrder1 並べ替え順序("SORT_ASC"|"SORT_DESC")
 * @param string $SortType1 並べ替えタイプ("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
 * @return 配列 ソートされた配列
 */
関数 sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
If(!is_array($ArrayData))
{
戻り $ArrayData;
}

// 引数の数値を取得します。
$ArgCount = func_num_args();

// 並べ替えの基準となるキーを取得し、SortRule 配列に置きます。
for($I = 1;$I {
$Arg = func_get_arg($I);
If(!エレギ("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$ sortrule [] }
その他
{
$SortRule[] }
}

// キーに従って値を取得し、配列に入れます。

foreach($ArrayData AS $Key => $Info)

{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}

// eval 文字列を作成し、それを評価します。

$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';

eval ($EvalString);
$ArrayData を返します;
}

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


$arr = '';

echo '二次元配列は次のとおりです:'.'
';
for($i=0; $i {
$arr[$i]['val'] = mt_rand(1, 100);
$arr[$i]['num'] = mt_rand(1, 100);
}

echo '

';<br>
print_r($arr);<br>
echo '
';

echo '二次元配列からキー val を抽出し、別の配列に分離します:'.'
';
foreach ($arr as $key => $row)
{
$vals[$key] = $row['val'];
$nums[$key] = $row['num'];
}

echo '
';<br>
print_r($vals);<br>
echo '
';

echo '並べ替え:'.'
';
array_multisort($vals, SORT_ASC, $arr);

echo '
';<br>
print_r($vals);<br>
echo '
';

?>

実行結果:

二次元配列は次のとおりです:
配列
(
[0] => 配列
(
[val] => [num] =>49
)

[1] => 配列

(
[val] => [数値] = & gt; )

[2] => 配列
(

[VAL] = > [数値] = & gt; )


[3] => 配列
(
[val] => [num] =>35
)

[4] => 配列
(
[VAL] = & GT; [num] =>38
)

[5] => 配列

(
[val] =>30
[番号] => 37
)

)

2 次元配列からキー val を抽出し、それを別の配列に分離します。
配列
(
[0] => 46
[1] => 8

[2] => 37

[3] => 32
[4] => 19
[5] => 30
)
並べ替え順:
配列
(
[0] => 8
[1] => 19
[2] => 30
[3] => 32
[4] => 37
[5] => 46
)

val で昇順にソートされた 2 次元配列を取得します。




http://www.bkjia.com/PHPjc/633146.htmlwww.bkjia.comtru​​e

http://www.bkjia.com/PHPjc/633146.html技術記事 2 次元配列のソートには、PHP で直接ソートできる関数 array_multisort も用意されています。以下では、array_multisort を使用して配列をソートすることに加えて、... も記述したことを紹介します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。