首页 > 编程知识 正文

php用foreach遍历二维数组,php二维数组排序函数

时间:2023-05-06 06:45:28 阅读:34719 作者:2352

排序是数据统计信息中非常重要的一环,通过简单的几行代码即可轻松处理二维数组的排序

$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($dataas$key=$row ) {

$volume[]=$row['volume'];

$edition[]=$row['edition'];

}

//数据按照volume降序排列,按照edition升序排列

将$data作为最后一个参数,按公用键排序

array_multisort($volume,SORT_DESC,$edition,SORT_ASC,$data );

打印_ r ($ data;

输出输出

阿拉伊

[0]=阵列

[卷]=98

[edition]=2

[1]=阵列

[卷]=86

[edition]=1

[2]=阵列

[卷]=86

[edition]=6

[3]=阵列

[卷]=85

[edition]=6

[4]=阵列

[卷]=67

[edition]=2

[5]=阵列

[卷]=67

[edition]=7

php官方在二维排序中加入了排序方法array_multisort,但是很难使用。 所以自己做吧

步骤2的封装方法

//*

* @param array $arr

* @param array $keys

* @param array $order

* @ return bool

*/

(functionsort _ array _ multi (array $ arr,array $keys,array $order ) ) ) ) ) ) ) )

{

//检查参数

if(count($keys )=) $times=count ) $order ) }{

for($I=0,$j=0; $j $times; $i =2,$j ) {

foreach($arras$k=$v ) {

//原始数组中是否存在此字段

if(isset($v ) $keys($j ) ) ) ) )

$params[$i][]=$v[$keys[$j]] //TODO中文排序支持

} else {

返回假;

}

}

if(strtoupper($order[$j] )=='ASC ' )。

$params[$i 1]=SORT_ASC;

} else {

$params[$i 1]=SORT_DESC;

}

}

$params[]=$arr;

return call _ user _ func _ array (' array _ multisort ',$params );

} else {

返回假;

}

}

$data=[

['name'=1,' score'=2.2],

['name'=2,' score'=3.3],

['name'=4,' score'=2.5],

['name'=1,' score'=1.1],

['name'=0,' score'=4],

];

调用//方法

sort_array_multi($data,['name ',' score'] ',['asc ',' desc'] );

通过call_user_func_array方法将array_multisort的不定参数作为数组注入方法中,无需每次手动连接参数,最后排序为true,失败为fallay _ multisort

$n=count($order );

$params数组说明:

$params[0]是需要数组的数组keys的第0项原始数组的二维$data中所有name字段的值,等效于Array_column($data,' name )。

$params[1]是与所排列数组keys的第0个对应的排序规则$order中的升序;

$params[3]在需要数组的数组keys的第1项的原始数组二维$data中的所有score字段的值都与Array_column($data,' score ' )等效;

$params[4]是与排列数组keys的第1项对应的排序规则$order中的升降顺序;

.

$params[2*$n 1]是对需要数组的原始数组$data的引用。

步骤3支持中文排序

//虽然刚才的代码对中文utf-8排序的支持明显不够,但是在这里我们对uft-8进行了一点改进,使其可以更好地支持gbk编码。

$params[$I][]=iconv('utf-8 '、' GBK '、$v ) $keys[$j] );

第4步测试

//input

$data=[

['name'='新疆',' score'=2.2,' id'=1 ],

['name'='阿a ',' score'=2.1,' id'=1 ],

['name'='阿b ',' score'=3.3,' id'=2 ],

['name'='湖南1 ',' score'=2.5,' id'=3 ],

['name'='湖南10 ',' score'=1.1,' id'=4 ],

['name'='北京',' score'=4,' id'=5 ],

['name'='广州',' score'=4,' id'=6 ],

['name'='阿a ',' score'=2.2,' id'=1 ],

];

sort_array_multi($data,['name ',' id ',' score'],['asc ',' asc ',' desc'] );

//output

阿拉伊

[0]=阵列

[name]=

[score]=2.2

[id]=1

[1]=阵列

[name]=

[score]=2.1

[id]=1

[2]=阵列

[name]=阿b

[score]=3.3

[id]=2

[3]=阵列

[name]=北京

[score]=4

[id]=5

[4]=阵列

[name]=广州

[score]=4

[id]=6

[5]=阵列

[name]=湖南1

[score]=2.5

[id]=3

[6]=阿莱

[name]=湖南省10

[score]=1.1

[id]=4

[7]=阿莱

[name]=新疆

[score]=2.2

[id]=1

大功告成后,这里应该有掌声!

认为通过阅读教程获得的人请关注博客的个人资料,并称赞这篇文章

欢迎加入博主微信(18501258725 )敏捷开发工具和周期农户心得交流。

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