ホームページ  >  記事  >  バックエンド開発  >  PHP 配列の多次元配列と 1 次元配列のソート_PHP チュートリアル

PHP 配列の多次元配列と 1 次元配列のソート_PHP チュートリアル

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

我们知道在php数组中分为多维数组与一维数组,我们下面来分别讲述一下php多维数组与一维数组排序原理与实现方法吧。

一维数组

第一组 :sort 和 rsort ,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引。看一下例程:

 代码如下 复制代码
  $a = array("a"=>1,2);
sort($a);
var_dump($a);
 
rsort($a);
var_dump($a);
?>
看一下第一个输出结果,第一个输出:
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}
第二个输出:
array(2) {
  [0]=>
  int(5)
  [1]=>
  int(4)
}

发现没有我们原来定义的索引a哪里去了?哪里去了?可以肯定的说是被他们无情的删除了,你要是对原来的索引关系并不在意的话,可以使用他们!

第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下,看运行结果:

 代码如下 复制代码
array(2) {
  ["a"]=>
  int(1)
  [0]=>
  int(2)
}
array(2) {
  [0]=>
  int(2)
  ["a"]=>
  int(1)
}

这个一看就明白的,不用说了吧!

第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的,大家可以把上例的函数替换成这两个,看看具体运行结果,这里也不说了,不然这个文章写的就太长了,怕有些兄弟没有耐心看到本文的重点,虽然重点就在下边!

通过自定义函数对PHP数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。

这个地方当然需要一个例子:

 代码如下 复制代码
 
输出结果:
array(4) {
  [0]=>
  int(1)
  [3]=>
  int(5)
  [1]=>
  int(4)
  [2]=>
  int(3)
}

多次元配列の一種


たとえば、array_multisort($a,$b)、$a,$b が 2 つの配列である場合、並べ替え後に $a 配列の 3 番目の要素が最初にランク付けされると、その要素に関係なく $b の 3 番目の要素が最初にランク付けされます。 $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);
?>
実行結果:
配列(5) { [0]=> int(0) [1]=> int(50) [4]=> ; int(100) }
配列(5) { [0]=> 文字列(1) “z” [1]=> 文字列(1) “q” [3]=>文字列(1) "f" [4]=> 文字列(1) "c" }

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

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

ただし、2 つの配列の要素の数は同じである必要があることに注意してください。そうでない場合は、警告メッセージが表示されます。

警告: array_multisort() [function.array-multisort]: 配列のサイズが ……
で矛盾しています

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

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

コードは次のとおりですコードをコピー //多次元配列を構築しましょう
$a=配列(100,2,4,7,7);
$b=array('ab','ac','ad','ag','ap');

$ab = 配列($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 の最終的なソート結果は、この 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 を使用するのとよく似ていますか?実は、ほぼ同じなんです!

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

コードは次のとおりですコードをコピー $array[] = array("年齢"=>20,"名前"=>"李");
$array[] = array("年齢"=>21,"名前"=>"ai");
$array[] = array("年齢"=>20,"名前"=>"ci");
$array[] = array("年齢"=>22,"名前"=>"ディ");

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 を参照する必要があります。最初の 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 – 項目を文字列で比較します

http://www.bkjia.com/PHPjc/633095.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633095.html技術記事 PHP の配列は多次元配列と 1 次元配列に分けられることはわかっています。PHP の多次元配列と 1 次元配列をそれぞれソートする原理と実装方法について説明します。 一次元配列の最初のグループ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。