PHP 二维数组排序

有两个方法,其中第一个方法返回的数组如果重新排序再用ajaxReturn就会变成一个jsonObject,而不是一个jsonArray了。
第二种方法是array。

1.PHP二维数组排序函数
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义。

以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:

function array_sort($arr,$keys,$type='asc'){ 
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array; 


它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:


$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)
);

$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);

上面是对$array这个二维数组按照'price'从低到高的排序。

输出结果:(略)。



2.PHP二维数组在排序的应用

最近弄一个二次开发的API接口,一直在找PHP是否可以直接对二维数组中的某个键名进行排序,平时PHP对一维数组的排序比较简单,但是当我们在读取数 据库写入数组后,可能经过一系列复杂的操作,最后形成一个二维数组,那次是如果为了更好的浏览数据,就必须对这个二维数组按不同键名进行排序。

查了下手册PHP本身有一个多维数组排序的函数:

bool array_multisort ( array $arr1 [, mixed $arg [, mixed $... [, array $... ]]] )

下面是手册当中对于array_multisort函数的描述:

array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序――这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。


由于我们通常取出处理的二维数组是这样的:

$arr = array (
  1 => array('id' => 2, 'fid' => '3' , 'data' => 'aa' ),
  2 => array('id' => 3, 'fid' => '1' , 'data' => 'bb' ),
  3 => array('id' => 1, 'fid' => '2' , 'data' => 'bb' )
);
假如我们需要把这个数组按照fid排序,按照array_multisort函数的要求我们就要取出fid这一列,然后根据这一列的升序,来调整原来的数组也升序。

function multi_array_sort($multi_array,$sort_field,$sort_type = SORT_ASC){
  if (!is_array($multi_array)) return FALSE;
  foreach ($multi_array as $row){
    if(! is_array($row)) return FALSE;
    $arr_field[] = $row[$sort_field];
  }
  array_multisort($arr_field,$sort_type,$multi_array);
  return $multi_array;
}//看看结果
print_r(multi_array_sort($arr, 'fid',SORT_DESC));



PHP 获取一维或多维数组某个特定键(数组下标)的所有值 

/*
author: [email protected]
description: 根据某一特定键(下标)取出一维或多维数组的所有值;不用循环的理由是考虑大数组的效率,把数组序列化,然后根据序列化结构的特点提取需要的字符串
*/
function array_get_by_key(array $array, $string){
if (!trim($string)) return false;
preg_match_all("/\"$string\";\w{1}:(?:\d+:|)(.*?);/", serialize($array), $res);
return $res[1];
}


$r = array('id'=> 1, 's'=> 23, 'a' => array('s' => 123, array(1, 2, 's' => "asdasdgsadggsadg")));
echo '

';
print_r (array_get_by_key($r, 's'));
/*
result:
Array
(
[0] => 23
[1] => 123
[2] => "asdasdgsadggsadg"
)
*/


原地址:

http://hi.baidu.com/zwy654350304/item/6cc44bd41dcfa03948e1dd0a

你可能感兴趣的:(PHP,php,二维数组,排序)