ホームページ  >  記事  >  バックエンド開発  >  PHP 多次元配列のソート、インデックスの対応関係の維持、uasort_PHP の賢い使い方チュートリアル

PHP 多次元配列のソート、インデックスの対応関係の維持、uasort_PHP の賢い使い方チュートリアル

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

実際の開発では、多かれ少なかれ、従来の単純な並べ替えアルゴリズムに加えて、PHP には組み込みの配列並べ替え関数も用意されています。ここでは、共有に焦点を当てます。uasort は、ユーザー定義の比較関数を使用して配列を並べ替えます。値をソートし、インデックスの関連付けを維持します。この記事では、多次元配列をソートできる機能に焦点を当てます。 ​​

ソート機能
パラメータの種類: bool uasort (配列 &$array、呼び出し可能な $cmp_function)
この関数は配列をソートし、インデックスとセルの関連付けを維持します。
主に、単位の順序が重要な連想配列のソートに使用されます。比較関数はユーザー定義です。
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
配列のソート例 (非クラス):
コードをコピー
1 /**
2 * カスタム並べ替え機能
3 * @param $param1
4 * @param $param2
5 * @return 0 (移動なし) 1 (順方向スワップ シーケンス) -1 (逆方向スワップ シーケンス)
6*/
7
8 関数 my_sort($param1, $param2){
9 if($param1 == $param2) return 0;
10 else return $param1 > 1 : -1;
11 }
12
13 $arr = 配列(
14 'a'=>'20',
15 'b'=>'1',
16 'c'=>'10',
17 'd'=>'5',
18 'e'=>'21',
19 'f'=>'4',
20 'g'=>'3',
21);
22
23 uasort($arr, 'my_sort');
24
25 var_dump($arr);
26
27 /*出力値
28配列(サイズ=7)
29 'b' => 文字列 '1' (長さ=1)
30 'g' => 文字列 '3' (長さ=1)
31 'f' => 文字列 '4' (長さ=1)
32 'd' => 文字列 '5' (長さ=1)
33 'c' => 文字列 '10' (長さ=2)
34 'a' => 文字列 '20' (長さ=2)
35 'e' => 文字列 '21' (長さ=2)
36 */
コードをコピー
多次元配列のソート例 (非クラス):
コードをコピー
/**
* カスタム並べ替え機能
* @param $param1
* @param $param2
* @return 0 (移動なし) 1 (順方向スワップシーケンス) -1 (逆方向スワップシーケンス)
*/
関数 my_sort($param1, $param2){
if($param1['value'] == $param2['value']) 0 を返す;
それ以外の場合は $param1['値'] > $param2['値'] 1 : -1;
;
}
$arr = 配列(
'a'=>array('key'=>'定義 1', 'value'=>'20'),
'b'=>array('key'=>'定義 2', 'value'=>'1'),
'c'=>array('key'=>'定義 3', 'value'=>'10'),
'd'=>array('key'=>'定義 4', 'value'=>'5'),
'e'=>array('key'=>'定義 5', 'value'=>'21'),
'f'=>array('key'=>'定義 6', 'value'=>'4'),
'g'=>array('key'=>'定義 7', 'value'=>'3'),
);
uasort($arr, 'my_sort');
var_dump($arr);
/*输出值
配列(サイズ=7)
'b' => 
配列 (サイズ=2)
'キー' =>文字列 '定义2' (長さ=7)
'値' =>文字列「1」(長さ=1)
'g' => 
配列 (サイズ=2)
'キー' =>文字列 '定义7' (長さ=7)
'値' =>文字列「3」(長さ=1)
'f' => 
配列 (サイズ=2)
'キー' =>文字列 '定义6' (長さ=7)
'値' =>文字列「4」(長さ=1)
'd' => 
配列 (サイズ=2)
'キー' =>文字列 '定义4' (長さ=7)
'値' =>文字列「5」(長さ=1)
'c' => 
配列 (サイズ=2)
'キー' =>文字列 '定义3' (長さ=7)
'値' =>文字列「10」(長さ=2)
'a' => 
配列 (サイズ=2)
'キー' =>文字列 '定义1' (長さ=7)
'値' =>文字列「20」(長さ=2)
'e' => 
配列 (サイズ=2)
'キー' =>文字列 '定义5' (長さ=7)
'値' =>文字列「21」(長さ=2)
*/
复制幣
クラス中排序、為方便以二维数组例:
uasort($arr1, array($this, 'public_my_sort'));
uasort($arr2, array('self', 'self_my_sort'));
复制幣
クラスmyClassSort{
/**
* ソートの主な方法
* @param $arr1 自己静的ソート
* @param $arr2 この並べ替え
* @return ソートされた配列
*/
public function main($arr1 = array(), $arr2 = array()){
uasort($arr1, array($this, 'public_my_sort'));
uasort($arr2, array('self', 'self_my_sort'));
return array('arr1'=>$arr1, 'arr2'=>$arr2);
}
/**
* カスタム並べ替え機能
* @param $param1
* @param$param2
* @return 0 (移動なし) 1 (順方向スワップシーケンス) -1 (逆方向スワップシーケンス)
*/
プライベート静的関数 self_my_sort($param1, $param2){
if($param1['value'] == $param2['value']) return 0;
else return $param1['value'] > $param2['値'] ? 1 : -1;
}
//同上
パブリック関数 public_my_sort($param1, $param2){
if($param1['value'] == $param2['value']) return 0;
else return $param1['value'] > $param2['値'] ? 1 : -1;
}
}
$arr = 配列(
'a'=>array('key'=>'定义1', 'value'=>'20'),
'b'=>array('key'=>'定义2', 'value'=>'1'),
'c'=>array('key'=>'定义3', 'value'=>'10'),
'd'=>array('key'=>'定義 4', 'value'=>'5'),
'e'=>array('key'=>'定義 5', 'value'=>'21'),
'f'=>array('key'=>'定義 6', 'value'=>'4'),
'g'=>array('key'=>'定義 7', 'value'=>'3'),
);
$myClassSort = 新しい myClassSort();
var_dump($myClassSort->main($arr, $arr));
/*出力結果は上記の例と同じです*/
コードをコピー
同様の機能拡張
array_multisort は複数の配列または多次元配列をソートしますが、最終的には特定の 1 次元配列が使用されます
arsort は、一次元配列を逆順にソートし、インデックスの関係を維持し、インデックスの対応を維持します
asort は 1 次元配列に対して前方ソートを実行し、インデックスの関係を維持し、インデックスの対応関係を維持します
krsort は配列をキー名で逆順にソートし、インデックスの対応を維持します
ksort は配列をキー名で前方にソートし、インデックスの対応を維持します
natcasesort は、「自然ソート」アルゴリズムを使用して、大文字と小文字を区別せずに 1 次元配列をソートし、配列内の混合英数字コンテンツをソートし、インデックスの対応を維持するために使用できます。
natsort は、「自然ソート」アルゴリズムを使用して、大文字と小文字を区別して 1 次元配列をソートし、配列コンテンツ内の英数字が混在する状況をソートし、インデックスの対応を維持するために使用できます
rsort はインデックスの対応を維持せずに 1 次元配列を逆ソートします
sort は、インデックスの対応を維持せずに、1 次元配列を順方向にソートします
uasort は、ユーザー定義の比較関数を使用して配列内の値を並べ替え、インデックスの関連付けを維持します。この記事では、この関数に焦点を当てます。
uksort はユーザー定義の比較関数を使用して配列内のキーを並べ替えます
usort はユーザー定義の比較関数を使用して、インデックスの関連付けを維持せずに配列内の値を並べ替えます

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

tru​​ehttp://www.bkjia.com/PHPjc/767108.html技術記事実際の開発では、多かれ少なかれ配列ソートの問題に遭遇するでしょう。単純なソートアルゴリズムの従来の記述に加えて、PHP は組み込みの配列ソート関数も提供します。今回は、uas... の共有に焦点を当てます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。