PHP 二維數組排序____PHP

來源:互聯網
上載者:User
有兩個方法,其中第一個方法返回的數組如果重新排序再用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: yangyu@sina.cn
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 '<pre>';
print_r (array_get_by_key($r, 's'));
/*
result:
Array
(
[0] => 23
[1] => 123
[2] => "asdasdgsadggsadg"
)
*/


原地址:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.