数组排序时发现 sort 与 rsort 排序完毕以后,var_dump 输出时原有 key 值丢失,变为数字索引。

$a=array("key1"=>"val1","key6"=>"val6","key3"=>"val1","key5"=>"val6","key4"=>"val8"); echo "sort(\$a)=".PHP_EOL; sort($a); var_dump($a);

输出如下:

sort($a)=
array(5) {
  string(4) "val1"
  string(4) "val1"
  string(4) "val6"
  string(4) "val6"
  string(4) "val8"
$a=array("key1"=>"val1","key6"=>"val6","key3"=>"val1","key5"=>"val6","key4"=>"val8");
echo "rsort(\$a)=".PHP_EOL;
rsort($a);
var_dump($a);

输出如下:

rsort($a)=
array(5) {
  [0]=>  string(4) "val8"
  [1]=>  string(4) "val6"
  [2]=>  string(4) "val6"
  [3]=>  string(4) "val1"
  [4]=>  string(4) "val1"
					

关于上面笔记中的回答:

疑问:“数组排序时发现 sort 与 rsort 排序完毕以后,var_dump 输出时原有 key 值丢失,变为数字索引。”

正解:关联数组进行升序和降序排列应使用

  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列

下面就上面例题用asort()函数,根据关联数组的值,对数组进行升序排列

$a=array("key1"=>"val1","key6"=>"val6","key3"=>"val1","key5"=>"val6","key4"=>"val8"); echo "asort(\$a)=".PHP_EOL; asort($a); var_dump($a); 输出如下:

asort($a)= array(5) { ["key1"]=> string(4) "val1" ["key3"]=> string(4) "val1" ["key6"]=> string(4) "val6" ["key5"]=> string(4) "val6" ["key4"]=> string(4) "val8"