PHP 對陣列中的指定下標的值大小進行排序,json_encode使用注意

PHP 對陣列中的指定下標的值大小進行排序,json_encode使用注意

第一種方法:

$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串不能使用,只要去掉序號即可,這裡給大家說一下,避免大家入坑。希望對大家有所幫助。

作者:吾林愛分享