PHP では、1 次元配列をソートするのは非常に簡単です。多次元データをソートしたい場合は、sort() と rsort() を使用するだけで済みます。関数なので、自分で行う必要があります。
php 配列のソート については、php で提供されている関数が多数あります。ない場合は追加できます。
sort() 関数は、配列セルを下位から上位にソートするために使用されます。
rsort() 関数は、配列セルを上位から下位にソートするために使用されます。
asort() 関数は、配列セルを下位から上位に並べ替え、インデックス関係を維持するために使用されます。
arsort() 関数は、配列セルを上位から下位に並べ替え、インデックス関係を維持するために使用されます。
ksort() 関数は、配列セルをキー名で下位から上位にソートするために使用されます。
krsort() 関数は、キー名によって配列セルを上位から下位にソートするために使用されます。
しかし、今日は主に PHP に付属する配列ソート関数について話します。主にカスタムソートについて話します。
1.バブル選別方法
説明: 最大の数を見つけて最後まで並べて探し続けます
例:
コードは次のとおりです
コードをコピー |
|
$arr = 配列(3,5,-1,0,2);
for($i=0;$i
for($j=0;$j
If($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
理解:
3、5、-1、0、2
//最初の数値から逆に比較し、次の数値より大きい場合は、次の数値で位置を調整します
//最初は 3 が 5 未満で、その後は変更されません
// 2 回目は、5 が -1 より大きいため、
になります。
3、-1、5、0、2
// 3 回目は、5 が 0 より大きいです
3、-1、0、5、2
// 4 回目、5 は 2 より大きいです
3、-1、0、2、5
これで内側のループが完了します。この時点で最後の番号はソートされ、次回は参加しません。
3、-1、0、2、5 2 番目の外側ループが始まります。 1 回目: 3 は -1 より大きいです
。
-1、3、0、2、5
2 回目: 3 は 0 より大きいです
-1、0、3、2、5
3 回目: 3 は 2 より大きいです
-1、0、2、3、5
これで次の 2 桁の並べ替えが完了します。以下同様です
-1、0、2、3、5
2. 選択ソート方法 説明: 最初の数値が最小の数値であると仮定し、次の数値をそれと順番に比較し、仮定した数値が最小の数値でない場合は、その位置を次の最小の数値と入れ替えます
。
コードは次のとおりです
コードをコピー
|
| $arr=配列(2,1,-1,3,0);
for($i=0;$i
$minval = $arr[$i];
$minindex = $i;
for($j=1+$i;$j
If($arr[$j]
$minval = $arr[$j];
$minindex = $j;
}
}
$temp = $arr[$i];
$arr[$i] = $arr[$minindex];
$arr[$minindex] = $temp;
}
理解:
2、1、-1、3、0
//最初の数値 2 が最小値であると仮定し、最小数値を見つけるために後続の数値を 2 と比較します
プロセス:
1 が 2 より小さい場合、minval=1
-1 が 1 より小さい場合、minval=-1
3 は -1 より大きく、変化しません
0 は -1 より大きく、変化しません
これで、配列内の最小の数値、-1 が見つかりました
-1 と 2 の位置を入れ替えて、最初の数字の並べ替えを完了します
したがって、配列は になります
-1、1、2、3、0
最初の番号 -1 はすでに順序になっているため、比較には参加せず、後ろに進みます
ここで minval=1 と仮定します
2 は 1 より大きく、変化しません
3 は 1 より大きく、変化しません
0 が 1 より小さい場合、minval=0 になります
1サイクルが完了したので、0と1の位置を入れ替えて2番目の数字の並べ替えを完了します
したがって、配列は になります
-1、0、2、3、1
//以下のプッシュメソッドは上記と同じです。 。 。
3. 挿入ソート方法の説明: まず、配列内の最初の数値が別個の順序配列であると仮定し、次に次の数値をそれと比較します [ここで、私が成長するにつれて、それはそれらになります]。次の数値が以下の場合想定される数字を計算し、小さい方の数字を後ろに移動し、最後にその数字を前に移動します
コードは次のとおりです |
コードをコピー |
$arr=配列(2,1,-1,3,0);
for($i=1;$i
$insertval=$arr[$i];
$insertindex = $i-1;
While($insertindex>=0 && $insertval
$arr[$insertindex+1]=$arr[$insertindex];
$insertindex--;
}
$temp = $arr[$i];
$arr[$insertindex+1]=$insertval;
}
|
理解:
2、1、-1、3、0
//初めて、挿入する数値 1 を insertval として保存し、insertval と 2 を比較します。 1 は 2 より小さいので、2 を後ろに移動して次の図になります
2、2、-1、3、0
//この時点では、2の前に数字はなく、insertindex=0なので比較が完了し、見つかった位置にinsertvalを挿入します。以下のようになります
1、2、-1、3、0
//このとき、1と2は順序付き配列になります
//2回目は、まず挿入する数値-1をinsertvalとして保存し、次にinsertvalを2と比較します。-1は2より小さいので、2を後ろに移動して次の図になります
1、2、2、3、0
//このとき、insertvalと1を比較し、-1が1未満の場合は-1を戻して以下の図になります(挿入する数値と前の順序付けされた配列を比較する処理です)
1、1、2、3、0
//この時点で、insertindexが終わっているので、この位置にinsertvalを挿入します
-1、1、2、3、0
//以下のメソッドは上記の通りです
2 次元配列ソート関数は、配列がデータベースから取得されない場合に、MySQL と同様の ORDER BY 効果を実現できます。
コードは次のとおりです |
コードをコピー |
// 説明: PHPにおける2次元配列のソート方法
/**
* @package バグフリー
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* 2 次元配列をレベル 2 の項目ごとにソートするには、array_multisort() 関数を使用します。
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @author 王春生
* @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 <$ArgCount;$I ++)
{
$Arg = func_get_arg($I);
if(!エレギ("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
それ以外
{
$SortRule[] = $Arg;
}
}
// キーに従って値を取得し、配列に代入します。
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}
// eval 文字列を作成し、それを評価します。
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
$ArrayData を返します。
}
//################# 例 #################
$arr = 配列(
配列(
「名前」 => 「学习」、
'サイズ' => 「1235」、
「タイプ」 => 「jpe」、
「時間」 => 「1921-11-13」、
'クラス' => 'dd'、
)、
配列(
「名前」 => 「中国功夫」、
「サイズ」 => 「153」、
「タイプ」 => 「jpe」、
「時間」 => '2005-11-13'、
'クラス' => 「じー」、
)、
配列(
)、
配列(
'名前' => '中国カンフー'、
'時間' => '1925-02-13',
)、
配列(
'名前' => '中国カンフー'、
)、
);
print_r($arr);
//注: 数値的に並べ替えると、153 は 65 より小さくなります
$temp = sysSortArray($arr,"名前","SORT_ASC","タイプ","SORT_DESC","サイズ","SORT_ASC","SORT_STRING");
print_r($temp);
?>
1 次元配列のソートに関しては、PHP に付属の関数を使用してデータのソートを完全に実装できます。したがって、ここで話しているのは、カスタム関数を使用してニーズを満たすことが比較的不可能な方法です。
http://www.bkjia.com/PHPjc/631627.html
www.bkjia.com
true |
http://www.bkjia.com/PHPjc/631627.html
技術記事
| PHP では、1 次元配列を並べ替えるには、sort() と rsort() を使用するだけで十分です。多次元データを並べ替えたい場合、PHP にはそのような関数がありません。だから私は...