为了账号安全,请及时绑定邮箱和手机立即绑定

对数组值进行排序,但不更改原始键顺序

对数组值进行排序,但不更改原始键顺序

PHP
莫回无 2023-09-22 14:41:04
我有一个看起来像这样的数组:$array = array(  '5' => 2,  '6' => 3,  '7' => 10,  '8' => 1);    我希望它看起来像这样:$array = array(  '5' => 1,  '6' => 2,  '7' => 3,  '8' => 10);键应保持不变,但值应按升序排列。sort()键将被删除并替换为从 0 开始的键。将asort()按照我想要的方式对值进行排序,但它将保持键关联。我尝试过sort(),但这些似乎都不是我需要的排序功能usort()。asort()我必须手动排序还是有可以使用的功能?
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您可以使用 提取数组的键array_keys,使用 对值进行排序sort,然后使用 将键与排序后的值组合起来array_combine

$array = array(

'5' => 2,

'6' => 3,

'7' => 10,

'8' => 1

);  

$keys = array_keys($array);

sort($array);

$array = array_combine($keys, $array);

print_r($array);

输出:


Array

(

    [5] => 1

    [6] => 2

    [7] => 3

    [8] => 10

)

3v4l.org 上的演示


查看完整回答
反对 回复 2023-09-22
?
侃侃无极

TA贡献2051条经验 获得超10个赞

您可以sort()通过将调用捕获到匿名函数调用中来将调用与全局范围隔离。

这执行与 Nick 的答案相同的操作,但不声明全局范围的变量,不修改原始数组,并且可以写成一行。我承认这是一个可读性较差的变体。

代码:(演示

var_export(

    array_combine(

        array_keys($array),

        (fn($v) => sort($v) ? $v : $v)($array)

    )

);


查看完整回答
反对 回复 2023-09-22
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信