ホームページ  >  記事  >  バックエンド開発  >  PHP配列ソートの各種方法まとめ_PHPチュートリアル

PHP配列ソートの各種方法まとめ_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 16:56:01941ブラウズ

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]; PHP では、1 次元配列を並べ替えるには、sort() と rsort() を使用するだけで十分です。多次元データを並べ替えたい場合、PHP にはそのような関数がありません。だから私は...
$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 効果を実現できます。

http://www.bkjia.com/PHPjc/631627.html
コードは次のとおりです コードをコピー

// 説明: 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

tru​​e

技術記事

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。