首页 > 编程知识 正文

php的二维数组排序,php二维数组按某个键值排序

时间:2023-12-27 01:51:14 阅读:323070 作者:RJFK

本文目录一览:

如何对PHP二维数组根据第二维某键值去重和排序

1 需要排序的数组如下:

$array = array(

array('name'='手机','brand'='诺基亚','price'=1050),

array('name'='笔记本电脑','brand'='lenovo','price'=4300),

array('name'='剃须刀','brand'='飞利浦','price'=3100),

array('name'='跑步机','brand'='三和松石','price'=4900),

array('name'='手表','brand'='卡西欧','price'=960),

array('name'='液晶电视','brand'='索尼','price'=6299),

array('name'='激光打印机','brand'='惠普','price'=1200)

);

2 排序的函数:

function arr_sort($array,$key,$order="asc"){//asc是升序 desc是降序

$arr_nums=$arr=array();

foreach($array as $k=$v){

$arr_nums[$k]=$v[$key];

}

if($order=='asc'){

asort($arr_nums);

}else{

arsort($arr_nums);

}

foreach($arr_nums as $k=$v){

$arr[$k]=$array[$k];

}

return $arr;

}

3 调用方式:

arr_sort($array,'price');

php二维数组自定义排序

function pSort($arr)

{

$TimeSort = array();

foreach ($arr as $key = $value) {

$TimeSort[$key] = $value['age'];

}

asort($TimeSort);

$data = array();

foreach ($TimeSort as $key = $value) {

$data[] = $arr[$key];

}

$i = 0;

foreach ($arr as $k = $v) {

$arr[$k] = $data[$i];

$i++;

}

return $arr;

}

主要部分,你也可以考虑用那个多为数组排序的那个函数,上面这个是我前几天自己写的,不知道在你这能用不

php循环的二维数组如何排序

$num=$arr[$a]-18按$num排序其实就是按$arr[$a]来排,只需在循环前对$arr排序就行了。出来的结果自然是按 $num排序

?php

$arr=array(30,15,40,38);

rsort($arr);

for($a=0; $a4; $a++){

$num=$arr[$a]-18;

if($num0){

$arr_1=array(array("$arr[$a]","$num"));

$num_1 = array();

foreach ($arr_1 as $arr_2) {

$num_1[] = $arr_2[1];

}

array_multisort( $num_1,SORT_DESC , $arr_1);

print_r($arr_1);

}

}

?

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

thinkPHP二维数组排序

从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。

遇到这个要求的时候就不是 ORDER BY 能解决的问题了。因此翻看 PHP 手册查找到了如下方法,做此笔记。

废话少说,奉上代码,清单如下:

[php] view plain copy

?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_dump($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中怎么根据二维数组中的子数组的某个元素进行排序

//先用array_column 多维数组按照纵向(列)取出

$date = array_column($arr, '0');

//上面得到的结果:array()

//再用array_multisort 结合array_column得到的结果对$arr进行排序

array_multisort($date,SORT_ASC,$arr);

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。