发布于 2022-08-01 12:38:07 浏览 343 次
案例
根据以下数组的mysort值进行排序
<?php
$arr = array(
array( "name"=>"张三", "mysort"=>1 ),
array( "name"=>"李四", "mysort"=>5 ),
array( "name"=>"王五", "mysort"=>3 )
);
asort($arr);
var_dump($arr);
?>
输出
array(3) {
[0]=> array(2) { ["name"]=> string(6) "张三" ["mysort"]=> int(1) }
[1]=> array(2) { ["name"]=> string(6) "李四" ["mysort"]=> int(5) }
[2]=> array(2) { ["name"]=> string(6) "王五" ["mysort"]=> int(3) }
}
从以上输出的情况来看,asort函数无法直接对关联数组按mysort值进行排序。
如需实现按mysort排序,思路是可以先取出mysort值和对应的键值做排序,最后通过键值重新获取数组。
<?php
$arr = array(
array( "name"=>"张三", "mysort"=>1 ),
array( "name"=>"李四", "mysort"=>5 ),
array( "name"=>"王五", "mysort"=>3 )
);
setSort();
var_dump($arr);
function setSort()
{
global $arr;
$myorder = array();
$cid = array();
foreach( $arr as $k=>$v )
{
$myorder[] = array('mysort'=>$v['mysort'],'key'=>$k);
}
asort($myorder); // 对$myorder 数组升序排序
foreach( $myorder as $k=>$v)
{
$cid[] = $arr[ $v['key'] ];
}
$arr = $cid;
}
?>
输出
array(3) {
[0]=> array(2) { ["name"]=> string(6) "张三" ["mysort"]=> int(1) }
[1]=> array(2) { ["name"]=> string(6) "王五" ["mysort"]=> int(3) }
[2]=> array(2) { ["name"]=> string(6) "李四" ["mysort"]=> int(5) }
}