php 二维数组排序几种方法
二维数组排序排序在php中也提供了一个函数array_multisort就可以直接排序了,下面我来介绍除了全使用array_multisort 对数组进行排序我们还写了一些自定二维数组排序方法。
有时候为了达到一定目的,需要对二维数组进行排序,现分享一下其实现的方法。
<?php $arr = array( '1' => array( 'date' => '2011-08-18', 'num' => 5 ) , '2' => array( 'date' => '2011-08-20', 'num' => 3 ) , '3' => array( 'date' => '2011-08-17', 'num' => 10 ) ); $result = sysSortArray($arr, 'num'); //这样运行之后的效果为: $arr = array( '1' => array( 'date' => '2011-08-18', 'num' => 3 ) , '2' => array( 'date' => '2011-08-20', 'num' => 5 ) , '3' => array( 'date' => '2011-08-17', 'num' => 10 ) ); //用到的函数: /** * @package 二维数组排序 * @version $Id: FunctionsMain.inc.php,v 1.32 2011/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 lamp100 * @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 < $ArgCount; $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; } ?>
另外:array_multisort 函数功能也很强大,详细可以参看PHP手册,里面讲的很详细。
我们可以使用array_multisort()这个函数。array_multisort() 函数对多个数组或多维数组进行排序。
参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
•SORT_ASC - 默认,按升序排列。(A-Z)
•SORT_DESC - 按降序排列。(Z-A)
随后可以指定排序的类型:
•SORT_REGULAR - 默认。将每一项按常规顺序排列。
•SORT_NUMERIC - 将每一项按数字顺序排列。
•SORT_STRING - 将每一项按字母顺序排列。
语法:array_multisort(array1,sorting order,sorting type,array2,array3...)
•array1:必需。规定输入的数组。
•sorting order:可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。
•sorting type:可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。
•array2:可选。规定输入的数组。
•array3:可选。规定输入的数组。
字符串键名将被保留,但是数字键将被重新索引,从 0 开始,并以 1 递增。可以在每个数组后设置排序顺序和排序类型。如果没有设置,每个数组参数会使用默认值。
下面是一个例子:
<?php $arr = ''; echo '二维数组如下:' . '<br / >'; for ($i = 0; $i <= 5; $i++) { $arr[$i]['val'] = mt_rand(1, 100); $arr[$i]['num'] = mt_rand(1, 100); } echo '<pre class="brush:php;toolbar:false">'; print_r($arr); echo '
'; foreach ($arr as $key => $row) { $vals[$key] = $row['val']; $nums[$key] = $row['num']; } echo '
'; print_r($vals); echo '
'; array_multisort($vals, SORT_ASC, $arr); echo '
'; print_r($vals); echo '
运行结果:
二维数组如下: Array ( [0] => Array ( [val] => 46 [num] => 49 ) [1] => Array ( [val] => 8 [num] => 24 ) [2] => Array ( [val] => 37 [num] => 3 ) [3] => Array ( [val] => 32 [num] => 35 ) [4] => Array ( [val] => 19 [num] => 38 ) [5] => Array ( [val] => 30 [num] => 37 ) ) 从二维数组中抽出键为val,单独成另一个数组: Array ( [0] => 46 [1] => 8 [2] => 37 [3] => 32 [4] => 19 [5] => 30 ) 对其进行排序: Array ( [0] => 8 [1] => 19 [2] => 30 [3] => 32 [4] => 37 [5] => 46 )
我们将得到一个按val升序排序的二维数组。
教程地址:
欢迎转载!但请带上文章地址^^

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











1. Iterator と foreach の違いはポリモーフィックな違いです (foreach の最下層は Iterator です) Iterator はインターフェイス型であり、コレクションや配列の型を気にしません; for と foreach の両方がコレクションの型を知る必要がありますまず、コレクション内の要素の種類についても; 1. foreach の最下層はイテレータによって記述されたコードであると言われる理由: 逆コンパイルされたコード: 2. foreach の削除とイテレータの違い まず、Alibaba を見てください。 Java 開発マニュアル。ただし、ケース 1 ではエラーは報告されず、ケース 2 (java.util.ConcurrentModificationException) では最初にエラーが報告されます。

PHP が foreach ループの数を決定する手順: 1. "$fruits" の配列を作成します; 2. 初期値 0 でカウンタ変数 "$counter" を作成します; 3. "foreach" を使用してループします配列を介してループ本体内のカウンタ変数の値を増加させ、各要素とそのインデックスを出力します; 4. foreach ループの外側にカウンタ変数の値を出力し、ループがどの要素に到達したかを確認します。

この記事では、PHP がどのようにしてキー値を反転した後に配列を返すのかについて詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP キー値フリップ 配列キー値フリップは、配列内のキーと値を交換して、元のキーを値として、元の値をキーとして持つ新しい配列を生成する配列に対する操作です。実装方法 PHP では、次の方法で配列のキーと値の反転を実行できます。 array_flip() 関数: array_flip() 関数は、キーと値の反転操作に特に使用されます。引数として配列を受け取り、キーと値が交換された新しい配列を返します。 $original_array=[

違い: 1. for はインデックスを介して各データ要素をループしますが、forEach は JS の基礎となるプログラムを介して配列のデータ要素をループします; 2. for はbreak キーワードを使用してループの実行を終了できますが、forEach はそれができません; 3 . forはループ変数の値を制御することでループの実行を制御できるが、forEachはできない; 4. forはループ外でループ変数を呼び出すことができるが、forEachはループ外でループ変数を呼び出すことができない; 5. forの実行効率forEach よりも高いです。

この記事では、PHP が返す配列の現在の要素について詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP 配列内の現在の要素を取得する PHP には、配列内の現在の要素を取得するなど、配列にアクセスして操作するためのさまざまなメソッドが用意されています。以下に、一般的に使用されるいくつかの手法を紹介します。 1. current() 関数 current() 関数は、配列の内部ポインタが現在指している要素を返します。ポインタは最初、配列の最初の要素を指します。次の構文を使用します。 $currentElement=current($array);2.key() function key() 関数は、現在要素を指している配列内部ポインタを返します。

forEach 関数を使用してオブジェクトのプロパティを反復処理するにはどうすればよいですか? JavaScript では、多くの場合、オブジェクトのプロパティを走査する必要があります。オブジェクトのプロパティを反復処理する簡潔な方法を使用したい場合は、forEach 関数が非常に良い選択です。この記事では、forEach 関数を使用してオブジェクトのプロパティを反復処理する方法を説明し、具体的なコード例を示します。まずはforEach関数の基本的な使い方を理解しましょう。 forEach関数はJavaです

Map インターフェイスの概要 Map インターフェイスは、Java コレクション フレームワークでキーと値のペアを格納するために使用されるデータ構造です。これにより、キーを使用して、関連する値を検索および取得できます。 Map インターフェイスは、put()、get()、remove()、containsKey()、containsValue()、size()、isEmpty() など、多くの便利なメソッドを提供します。 Map の実装 Java で最も一般的に使用される Map 実装は、HashMap と TreeMap です。 HashMap は、キーのハッシュ値を計算することで値を迅速に検索して取得するハッシュ テーブル ベースの Map 実装です。 TreeMap は、キーを昇順または降順に並べ替える、赤黒ツリーに基づく Map 実装です。

PHP における Break キーワードの役割と使用法の詳細な説明 PHP プログラミングでは、break は現在のループまたは switch ステートメントを中断し、ループまたは switch から飛び出すために使用される制御フロー ステートメントです。この記事ではbreakキーワードの役割と使い方を詳しく紹介します。 1. ループ内のブレーク ループ構造におけるブレークの機能は、ループを早期に終了し、ループ本体から飛び出して、ループ後のコードを実行することです。一般的なループ構造には、for、while、do...while などがあります。 forループ内で
