第一种方法:
$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串不能利用,只要去掉序号即可,这里给大家说一下,避免大家入坑。希望对大家有所帮助。
作者:吾林爱分享