當前位置:首頁 » 編程語言 » php二維數組的排序

php二維數組的排序

發布時間: 2023-09-11 20:50:06

php 二維數組的排序問題

對二維數組排序,得用到array_multisort()
下面是從php手冊摘出來的例子.具體請根據你的問題查閱手冊.
=========
數據全都存放在名為 data 的數組中。這通常是通過循環從資料庫取得的結果,例如 mysql_fetch_assoc()。

<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>

本例中將把 volume 降序排列,把 edition 升序排列。

現在有了包含有行的數組,但是 array_multisort() 需要一個包含列的數組,因此用以下代碼來取得列,然後排序。

<?php
// 取得列的列表
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}

// 將數據根據 volume 降序排列,根據 edition 升序排列
// 把 $data 作為最後一個參數,以通用鍵排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

數據集合現在排好序了,結果如下:

volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7

❷ PHP中怎麼根據二維數組中的子數組的某個元素進行排序

//先用array_column 多維數組按照縱向(列)取出
$date = array_column($arr, '0');
//上面得到的結果:array()
//再用array_multisort 結合array_column得到的結果對$arr進行排序
array_multisort($date,SORT_ASC,$arr);

❸ php二維數組中按某個元素的值排序

//提供一個方法
classlib_BaseUtils{
static$s_field;
static$s_sc;
/**
*php二維數組按鍵值排序
*@paramarray$a需要排序的數組
*@paramstring$sort排序的鍵值
*@paramstring$d默認ASC,帶上參後為DESC
*@returnboolean
*/
staticfunctionarray_sort(&$a,$sort,$d=''){
self::$s_field=$sort;
self::$s_sc=$d;
usort($a,array("lib_BaseUtils","array_sort_callback"));
return$a;
}
//排序回調方法請勿刪除
staticfunctionarray_sort_callback($a,$b){
$s_a=self::$s_sc?$b:$a;
$s_b=self::$s_sc?$a:$b;
$field=self::$s_field;
switch(true){
case(is_string($s_a[$field])&&is_string($s_b[$field])):
returnstrcmp($s_a[$field],$s_b[$field]);
break;
default:
if($s_a[$field]==$s_b[$field]){
return0;
}else{
return$s_a[$field]>$s_b[$field]?-1:1;
}
}
}
}

調用方法

lib_BaseUtils::array_sort($lists, 'app_down','desc');

❹ thinkPHP二維數組排序

從兩個不同的表中獲取各自的4條數據,然後整合(array_merge)成一個數組,再根據數據的創建時間降序排序取前4條。
遇到這個要求的時候就不是 ORDER BY 能解決的問題了。因此翻看 PHP 手冊查找到了如下方法,做此筆記。
廢話少說,奉上代碼,清單如下:
[php] view plain
<?php
/**
* 二維數組根據某個欄位排序
* 功能:按照用戶的年齡倒序排序
* @author ruxing.li
*/
header('Content-Type:text/html;Charset=utf-8');
$arrUsers = array(
array(
'id' => 1,
'name' => '張三',
'age' => 25,
),
array(
'id' => 2,
'name' => '李四',
'age' => 23,
),
array(
'id' => 3,
'name' => '王五',
'age' => 40,
),
array(
'id' => 4,
'name' => '趙六',
'age' => 31,
),
array(
'id' => 5,
'name' => '黃七',
'age' => 20,
),
);

$sort = array(
'direction' => 'SORT_DESC', //排序順序標志 SORT_DESC 降序;SORT_ASC 升序
'field' => 'age', //排序欄位
);
$arrSort = array();
foreach($arrUsers AS $uniqid => $row){
foreach($row AS $key=>$value){
$arrSort[$key][$uniqid] = $value;
}
}
if($sort['direction']){
array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers);
}

var_mp($arrUsers);

/*
輸出結果:

array (size=5)
0 =>
array (size=3)
'id' => int 5
'name' => string '黃七' (length=6)
'age' => int 20
1 =>
array (size=3)
'id' => int 2
'name' => string '李四' (length=6)
'age' => int 23
2 =>
array (size=3)
'id' => int 1
'name' => string '張三' (length=6)
'age' => int 25
3 =>
array (size=3)
'id' => int 4
'name' => string '趙六' (length=6)
'age' => int 31
4 =>
array (size=3)
'id' => int 3
'name' => string '王五' (length=6)
'age' => int 40

*/

❺ PHP里switch裡面怎樣增加默認的二維數組排序,就是直接輸出二維數組裡面定義的順序

您好,這樣:
<?php

$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 取得列的列表
foreach ($data as $key => $row)
{
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
$ret = arraySort($data, 'volume', 'desc');
print_r($ret);
/**
* @desc arraySort php二維數組排序 按照指定的key 對數組進行排序
* @param array $arr 將要排序的數組
* @param string $keys 指定排序的key
* @param string $type 排序類型 asc | desc
* @return array
*/
function arraySort($arr, $keys, $type = 'asc') {
$keysvalue = $new_array = array();
foreach ($arr as $k => $v){
$keysvalue[$k] = $v[$keys];
}
$type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
reset($keysvalue);
foreach ($keysvalue as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
?>
這個自定義函數與系統函數的一個區別就是:自定義函數只支持針對某一個key的排序,如果要支持多個key的排序需要執行多次; 而系統函數array_multisort可以一次性對多個key且可以指定多個排序規則,系統函數還是相當強大的,推薦使用系統函數,畢竟是C底層實現的,這里只是舉例說明如果通過自定義函數來對數組進行排序,當然這個自定義函數也可以繼續擴展來支持更多的排序規則。在取排名、排行榜、成績等場景中用到的還是非常多的。

❻ PHP關於二維數組排序的問題!求大神幫忙

我用的是冒泡演算法,代碼如下:

<?php
$arr=array(
array(
'id'=>1,
'num'=>3,
'time'=>1522131034
),
array(
'id'=>2,
'num'=>7,
'time'=>1522132034
),
array(
'id'=>3,
'num'=>7,
'time'=>1522133034
),
array(
'id'=>4,
'num'=>7,
'time'=>1522134034
),
array(
'id'=>5,
'num'=>10,
'time'=>1522135034
),
array(
'id'=>6,
'num'=>0,
'time'=>1522136034
)
);
$t=count($arr);
$tmp=array();
for($i=0;$i<$t;$i++)
{
for($j=$i+1;$j<$t;$j++)
{
if($arr[$i]['num']>$arr[$j]['num'])
{
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp;
}elseif($arr[$i]['num']==$arr[$j]['num'])
{
if($arr[$i]['time']>$arr[$j]['time'])
{
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
}
print_r($arr);
?>
熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:233
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:532
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726