第一種方法:
$b = array(
array(‘name’=>‘北京’,‘nums’=>‘200’),
array(‘name’=>‘上海’,‘nums’=>0),
array(‘name’=>‘廣州’,‘nums’=>‘50’),
array(‘name’=>‘深圳’,‘nums’=>‘70’)
);
$a = array();
//取出陣列中要排序的值放置新陣列中
foreach($b as $key=>$val){
//去除掉值為0的資料
if($val[‘nums’]){
$a[] = $val[‘nums’];
}
}
// var_dump($a);
//對新陣列進行排序 很重要 如果不排序下面的迴圈賦值還是沒有順序
sort($a);
// var_dump($a);
//鍵值互換
$a = array_flip($a);
$result = array();
//迴圈原陣列
foreach($b as $k=>$v){
//找到原陣列中的數值
$temp1 = $v[‘nums’];
//過濾掉為0的值
if($temp1){
//透過原陣列中的數值查詢出他的下標
$temp2 = $a[$temp1];
//result[2]=200; result[0]=50; ……。
$result[$temp2] = $v;
}
}
//這裡還要把$result重新以鍵的大小進行排序
ksort($result);
var_dump($result);
第二種方法:
//把陣列的值重新付給一個新陣列
foreach ($b as $key => $value) {
$rating[$key] = $value[‘nums’];
}
//透過PHP系統函式對陣列進行排序 正序 倒序都可以
// array_multisort($rating, SORT_DESC, $b);
array_multisort($rating, SORT_ASC, $b);
//輸出排序好後的陣列
var_dump($b);
重要提示:
如果你想要把資料進行json_encode 一定要注意當從大到小排序時json會自動增加下標,可能導致前臺無法使用該json串,所以從新對陣列排下序即可。(使用第二種方法自動排序了不需要再排序)
如:這個json串前端有可能解析不了{“2”:{“name”:“\u5317\u4eac”,“nums”:“200”},“1”:{“name”:“\u6df1\u5733”,“nums”:“70”},“0”:{“name”:“\u5e7f\u5dde”,“nums”:“50”}}
一定要去掉變成下面這種。
[{“name”:“\u5e7f\u5dde”,“nums”:“50”},{“name”:“\u6df1\u5733”,“nums”:“70”},{“name”:“\u5317\u4eac”,“nums”:“200”}]
//陣列從新排序
$i=0;
foreach($result as $v){
$res1[$i]=$v;
$i++;
}
die(json_encode($res1));
就因為這個序號導致我查詢好久json串不能使用,只要去掉序號即可,這裡給大家說一下,避免大家入坑。希望對大家有所幫助。
作者:吾林愛分享