我有一个多维数组,需要对其进行排序才能显示正确的数据.以下是示例

$specification = array(
    'type' => array(
        [0] => 'Excavator',
        [1] => 'Excavator',
        [2] => 'Excavator',
        [3] => 'Excavator',
        [4] => 'Mini Excavator',
        [5] => 'Mini Excavator',
        [6] => 'Rubber Tire',
        [7] => 'Rubber Tire',
        [8] => 'Rubber Tire',
    ),
    'estimated_weight' => array(
        [0] => '750',
        [1] => '750',
        [2] => '675',
        [3] => '680',
        [4] => '110',
        [5] => '130',
        [6] => '200',
        [7] => '300',
        [8] => '200',
    ),
    'weight_class' => array(
        [0] => '24,000 - 33,000 Lbs',
        [1] => '24,000 - 33,000 Lbs',
        [2] => '40,000 - 45,000 Lbs',
        [3] => '40,000 - 45,000 Lbs',
        [4] => '2,500 - 4,000 Lbs',
        [5] => '4,000 - 8,000 Lbs',
        [6] => 'Rubber Tire',
        [7] => 'Rubber Tire',
        [8] => 'Rubber Tire',
    ),
);

我想要一个按estimated weightWeight Class同时排序数据的数组,我已经try 了多个排序,但无法找到适当的解决方案我也try 了usort,但它似乎不起作用,需要帮助来排序.

array_multisort(
    array_column($specification, 'weight_class'), SORT_ASC,
    array_column($specification, 'estimated_weight'), SORT_ASC,
    $specification
);

由于橡胶轮胎是文本,其他数据都是数字,所以预期结果与estimated_weightweight_class一起排序,最终将得到橡胶轮胎.

$specification = array(
    'type' => array(
        [0] => 'Mini Excavator',
        [1] => 'Mini Excavator',
        [2] => 'Excavator',
        [3] => 'Excavator',
        [4] => 'Excavator',
        [5] => 'Excavator',
        [6] => 'Rubber Tire',
        [7] => 'Rubber Tire',
        [8] => 'Rubber Tire',
    ),
    'estimated_weight' => array(
        [0] => '110',
        [1] => '130',
        [2] => '675',
        [3] => '680',
        [4] => '750',
        [5] => '750',
        [6] => '200',
        [7] => '200',
        [8] => '300',
    ),
    'weight_class' => array(
        [0] => '2,500 - 4,000 Lbs',
        [1] => '4,000 - 8,000 Lbs',
        [2] => '24,000 - 33,000 Lbs',
        [3] => '24,000 - 33,000 Lbs',
        [4] => '40,000 - 45,000 Lbs',
        [5] => '40,000 - 45,000 Lbs',
        [6] => 'Rubber Tire',
        [7] => 'Rubber Tire',
        [8] => 'Rubber Tire',
    ),
);

推荐答案

访问第一级关联元素不需要array_column()个.

使用SORT_Natural标志对连字符连接的值进行正确排序.

不能将整个数组指定为最后一个参数,因为使用大小(3)不等于所有其他数组大小(9)的数组会中断函数.

从逻辑上讲,您不希望重新排序关联元素位置;您只需要同步重新排序子array.

没有必要将SORT_ASC声明为参数--它是默认的排序顺序.

代码:(Demo)

array_multisort(
    $specification['weight_class'],
    SORT_NATURAL,
    $specification['estimated_weight'],
    $specification['type'],
);
var_export($specification);

Php相关问答推荐

将一个数字分配到一系列因素中(就像贪婪算法)

添加自定义Metabox到WooCommerce管理订单,启用HPOS

如何使用属性#[Embedded]嵌入带有规则的对象集合?

PHP DateInterval天数不一致

在WooCommerce中禁用特定日期之前的免费送货

多行PHP属性声明中是否允许单行注释

在PHP中读取JSON

在WordPress中从CPT中删除插件

如何从WooCommerce checkout 帐单邮箱字段中删除星号?

在Laravel中创建辅助函数时的约定

Mockery在模拟Redis连接时抛出错误:Mockery\Exception\BadMethodCallException

如何正确判断 PHP 是否已正确配置为使用 DOMDocument?

Woocommerce注册中的自定义复选框验证错误提示问题

设置GA4 PHP API的setSubject以允许访问所有管理员账户属性

如何使用在产品快速编辑菜单前端的自定义框中 Select 的值更新 woocommerce 产品属性值?

Symfony 迁移判断器在我的工作中失控

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?

使用 --exclude-dir 选项从 PHP 执行 grep 时出现问题

如何在 php/laravel 中获取元素在数组中的位置

将加密/解密函数从 PHP 转换为 NodeJS