暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

php一维数组排序并保留键值

染卷 2020-04-04
1833

php使用asort、arsort可以对数组的值进行排序,但是原始数组的key值会自动清除。下列有两种方式可以php对数组排序后依然保留键值,可以灵活运用。

第一种方法如下:

  1. //这种方法,仅针对数组不存在相同value值得情况可以使用,否则会报错

  2. function sort_with_keyName1($arr,$orderby='desc'){

  3. //在内存的另一处 $a 复制内容与 $arr 一样的数组

  4.     foreach($arr as $key => $value)

  5.     $a[$key]=$value;

  6.     if($orderby== 'asc'){//对数组 $arr 进行排序

  7.         asort($arr);

  8.     }else{

  9.         arsort($arr);

  10.     }

  11. /*创建一个以原始数组的键名为元素值 (键值) 的

  12. *数组 $b, 其元素 (键值) 顺序,与排好序的数组 $arr 一致。

  13. */

  14.     $index=0;

  15.     foreach ($arr as $keys => $values) //按排序后数组的顺序

  16.     foreach($a as $key => $value) //在备份数组中寻找键值

  17.     if ($values==$value)//如果找到键值

  18.     $b[$index++]=$key; // 则将数组 $b 的元素值,设置成备份数组 $a 的键名

  19. //返回用数组 $b 的键值作为键名,数组 $arr 的键值作为键值,所组成的数组

  20.     return array_combine($b, $arr);

第二种方法如下:

  1. //本方法最灵活,效果最好,无论数组内是否有相同的value值都可以

  2. private function sort_with_keyName2($arr,$orderby='desc'){//desc 从大到小倒序排列, asc递增排序

  3.     $new_array = array();

  4.     $new_sort = array();

  5.     foreach($arr as $key => $value){

  6.         $new_array[] = $value;

  7.     }

  8.     if($orderby=='asc'){

  9.         asort($new_array);

  10.     }else{

  11.         arsort($new_array);

  12.     }

  13.     foreach($new_array as $k => $v){

  14.         foreach($arr as $key => $value){

  15.             if($v==$value){

  16.                 $new_sort[$key] = $value;

  17.                 unset($arr[$key]);

  18.                 break;

  19.             }

  20.         }

  21.     }

  22.     return $new_sort;

  23. }

使用方法直接调用上面两种方法的任意函数即可

$arr1 = array(‘AA’=>3,’AB’=>1,’AC’=>2);
var_dump(sort_with_keyName1($arr1));//展示排序后的数组元素

 

$arr2 = array(‘AA’=>3,’AB’=>1,’AC’=>2,’AD’=>3);
var_dump(sort_with_keyName2($arr2));//展示排序后的数组元素

分别使用无相同value与有相同value的php数组用这俩函数进行调用,就能发现他们的功能区别了。不得不说第二种方法的这句unset($arr[$key]);真是神作代码!

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/php一维数组排序并保留键值/


文章转载自染卷,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论