ホームページ php教程 php手册 php数组排序的各种方法总结

php数组排序的各种方法总结

May 25, 2016 pm 04:56 PM
PHP配列

在php中我们要对一维数组排序做起来很简单我们只要用到sort(),rsort()这样就完成了,如果要对多维数据排序的话php还没这类函数这个就需要我们自己来做了。

对于php数组排序在php中提供了很多的函数,下面我列出来,不全的大家可以补充。

sort() 函数用于对数组单元从低到高进行排序。
rsort() 函数用于对数组单元从高到低进行排序。
asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
ksort() 函数用于对数组单元按照键名从低到高进行排序。
krsort() 函数用于对数组单元按照键名从高到低进行排序。

不过今天我们主要是不是讲php自带的数组排序函数主要是讲自定的排序


一、冒泡排序法
  说明:找到最大的数,排列到最后面,然后继续找
 
例:

 代码如下 复制代码
$arr = array(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,那么不变
    //第二次,5大于-1,那么变成
3,-1,5,0,2
    //第三次,5大于0
3,-1,0,5,2
    //第四次,5大于2
3,-1,0,2,5
    至此完成一次内循环,此时最后一个数完成排序,下次将不参与
3,-1,0,2,5第二次外循环开始    第一次:3大于-1
-1,3,0,2,5
    第二次:3大于0
-1,0,3,2,5
    第三次:3大于2
-1,0,2,3,5
    至此完成后面两位数的排序了,接下来类推
-1,0,2,3,5
二、选择排序法    说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置

 代码如下 复制代码
$arr=array(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
现在一次循环完成,调换0与1的位置完成第二个数的排序
那么现在数组变成
-1,0,2,3,1
//后面的推法与上面相同。。。
 
三、插入排序法说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面

 代码如下 复制代码
$arr=array(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变成有序数组
    //第二次,先保存待插入的数-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
    //后面推法如上


二维数组排序函数,可以实现类似 MySQL 的 ORDER BY 效果,当数组不是从数据库取得时会有特殊应用。

 

 代码如下 复制代码

// 说明:PHP中二维数组的排序方法

 
/**
 * @package     BugFree
 * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
 *
 *
 * Sort an two-dimension array by some level two items use array_multisort() function.
 *
 * sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
 * @author                      Chunsheng Wang
 * @param  array   $ArrayData   the array to sort.
 * @param  string  $KeyName1    the first item to sort by.
 * @param  string  $SortOrder1  the order to sort by("SORT_ASC"|"SORT_DESC")
 * @param  string  $SortType1   the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
 * @return array                sorted array.
 */
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
    if(!is_array($ArrayData))
    {
        return $ArrayData;
    }
 
    // Get args number.
    $ArgCount = func_num_args();
 
    // Get keys to sort by and put them to SortRule array.
    for($I = 1;$I     {
        $Arg = func_get_arg($I);
        if(!eregi("SORT",$Arg))
        {
            $KeyNameList[] = $Arg;
            $SortRule[]    = '$'.$Arg;
        }
        else
        {
            $SortRule[]    = $Arg;
        }
    }
 
    // Get the values according to the keys and put them to array.
    foreach($ArrayData AS $Key => $Info)
    {
        foreach($KeyNameList AS $KeyName)
        {
            ${$KeyName}[$Key] = $Info[$KeyName];
        }
    }
 
    // Create the eval string and eval it.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
}
 
//################# 示例 #################
$arr = array(
    array(
        'name'      =>   '学习',
        'size'      =>   '1235',
        'type'      =>   'jpe',
        'time'      =>   '1921-11-13',
        'class'     =>   'dd',
    ),
    array(
        'name'      =>   '中国功夫',
        'size'      =>   '153',
        'type'      =>   'jpe',
        'time'      =>   '2005-11-13',
        'class'     =>   'jj',
    ),
    array(
        'name'      =>   '编程',
        'size'      =>   '35',
        'type'      =>   'gif',
        'time'      =>   '1997-11-13',
        'class'     =>   'dd',
    ),
    array(
        'name'      =>   '中国功夫',
        'size'      =>   '65',
        'type'      =>   'jpe',
        'time'      =>   '1925-02-13',
        'class'     =>   'yy',
    ),
    array(
        'name'      =>   '中国功夫',
        'size'      =>   '5',
        'type'      =>   'icon',
        'time'      =>   '1967-12-13',
        'class'     =>   'rr',
    ),
);
 
print_r($arr);
 
//注意:按照数字方式排序时 153 比 65 小
$temp = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING");
 
print_r($temp);
 
?>

至于一维数组排序我们用php自带的函数就可以完全实现数据排序了,所以我们讲到的都是相对用自定函数无法完成我们需求的做法了。



本文地址:

转载随意,但请附上文章地址:-)

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 配列を使用してチャートや統計グラフを生成および表示する方法 PHP 配列を使用してチャートや統計グラフを生成および表示する方法 Jul 15, 2023 pm 12:24 PM

PHP 配列を使用してチャートや統計グラフを生成および表示する方法 PHP は、強力なデータ処理機能とグラフィック生成機能を備えた、広く使用されているサーバーサイド スクリプト言語です。 Web 開発では、データのグラフや統計グラフを表示する必要がよくありますが、PHP 配列を使用すると、これらの機能を簡単に実装できます。この記事では、PHP 配列を使用してチャートや統計グラフを生成および表示する方法を紹介し、関連するコード例を示します。必要なライブラリ ファイルとスタイル シートの導入 開始する前に、いくつかの必要なライブラリ ファイルを PHP ファイルに導入する必要があります

PHP 配列を使用して動的なスライドショーと画像表示を生成する方法 PHP 配列を使用して動的なスライドショーと画像表示を生成する方法 Jul 15, 2023 pm 01:17 PM

PHP 配列を使用して動的なスライドショーと画像表示を生成する方法 スライドショーと画像表示は Web デザインの一般的な機能であり、カルーセルやギャラリー表示などのシナリオでよく使用されます。一般的なサーバーサイド スクリプト言語として、PHP にはデータを処理して動的な HTML ページを生成する機能があり、動的なスライドショーや画像表示の生成に非常に適しています。この記事では、PHP 配列を使用して動的なスライドショーと画像表示を生成する方法と、対応するコード例を紹介します。画像データを準備する まず、画像パス データのセットを準備する必要があります。

PHPで配列を平均化する関数は何ですか? PHPで配列を平均化する関数は何ですか? Jul 17, 2023 pm 04:03 PM

PHP 配列平均関数には次のものが含まれます: 1. array_sum()、配列内のすべての値の合計を計算するために使用されます平均を計算するには、配列内のすべての値を加算してから除算します。配列要素の数; 2、array_reduce()、配列を反復し、初期値を使用して各値を計算するために使用されます; 3. array_mean()、配列の平均を返し、最初に配列の合計を計算するために使用されます。配列要素の数を計算し、合計を配列要素の数で割って平均を取得します。

PHP 配列を使用してユーザー ログインおよび権限管理機能を実装する方法 PHP 配列を使用してユーザー ログインおよび権限管理機能を実装する方法 Jul 15, 2023 pm 08:55 PM

PHP 配列を使用してユーザーのログインと権限の管理機能を実装する方法 Web サイトを開発する場合、ユーザーのログインと権限の管理は非常に重要な機能の 1 つです。ユーザー ログインにより、ユーザーを認証し、Web サイトのセキュリティを保護することができます。権限管理では、Web サイト上でのユーザーの操作権限を制御し、ユーザーが許可されている機能のみにアクセスできるようにします。この記事では、PHP 配列を使用してユーザーのログインと権限の管理機能を実装する方法を紹介します。簡単な例を使用してこのプロセスを説明します。まず作成する必要があります

PHP配列のキーと値のペアとは何ですか? PHP配列のキーと値のペアとは何ですか? Aug 03, 2023 pm 02:20 PM

PHP の配列キーと値のペアは、キーと対応する値で構成されるデータ構造です。キーは配列要素の識別子であり、値はキーに関連付けられたデータです。キーを識別子として使用してデータを保存およびアクセスできるようになり、キーと値のペアを使用することで、配列内の要素の操作と管理がより簡単になり、プログラム開発がより柔軟かつ効率的になります。

PHP 配列のパフォーマンス最適化手法の探求 PHP 配列のパフォーマンス最適化手法の探求 Mar 13, 2024 pm 03:03 PM

PHP 配列は、開発プロセス中によく使用される非常に一般的なデータ構造です。ただし、データ量が増加すると、アレイのパフォーマンスが問題になる可能性があります。この記事では、PHP 配列のパフォーマンス最適化手法をいくつか検討し、具体的なコード例を示します。 1. 適切なデータ構造を使用する PHP には、通常の配列に加えて、SplFixedArray、SplDoublyLinkedList など、特定の状況で通常の配列よりもパフォーマンスが優れたデータ構造がいくつかあります。

PHPの二次元配列を一次元配列に変換する方法 PHPの二次元配列を一次元配列に変換する方法 Aug 03, 2023 am 11:14 AM

PHP 配列を 2 次元から 1 次元配列に変換する方法: 1. ループ トラバーサルを使用して 2 次元配列を走査し、各要素を 1 次元配列に追加します; 2. 「array_merge」関数を使用して複数の要素をマージします配列を配列に. 二次元配列を「array_merge」関数にパラメータとして渡して一次元配列に変換; 3. 「array_reduce」関数を使用すると、配列内のすべての値を処理できますコールバック関数を介して、最終的に結果を返します。

PHPに存在する配列の数を確認する方法 PHPに存在する配列の数を確認する方法 Aug 04, 2023 pm 05:40 PM

PHP で配列を決定するには、いくつかの方法があります。 1. すべてのタイプの配列に適した count() 関数を使用します。ただし、渡されたパラメータが配列でない場合、count() 関数は 0 を返すことに注意してください。2. 他のプログラミング言語との互換性を維持するために使用される sizeof() 関数を使用します。3. カスタム関数では、ループを使用して配列を走査することにより、配列を走査するたびにカウンターが 1 ずつ増加し、最終的に配列の長さが取得されます。カスタム関数は実際のニーズに応じて変更および拡張できるため、より柔軟になります。

See all articles