【问题标题】:PHP: Sort array according to another arrayPHP:根据另一个数组对数组进行排序
【发布时间】:2015-03-05 18:19:27
【问题描述】:

我在 php 中遇到问题,我尝试搜索但我变得更加困惑。我需要使用“优先级”键值根据另一个数组对数组进行排序。

这是我需要过滤的顺序。

$custom_order = array(
    array('priority' => 0, 'field_id' => 'password'),
    array('priority' => 1, 'field_id' => 'username')
);

这是需要过滤的数组

$default_order = array(
    'name' => array(
        'username' => array(
            'type'        => 'text',
            'priority'    => 0
        ),
        'password' => array(
            'type'        => 'password',
            'priority'    => 1
        ),
    ),
);

这是我想要的顺序

$final_order = array(
    'name' => array(
       'password' => array(
            'type'        => 'password',
            'priority'    => 0
        ),
        'username' => array(
            'type'        => 'text',
            'priority'    => 1
        ),
    ),
);

我很困惑,我不确定我应该使用 uasort 还是 array_intersect,通过阅读其他关于它的文章我更加困惑。谁能解释一下我将如何以这种方式对数组进行排序?

非常感谢。

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    如果优先级是实际的排序标准,那么 usort 将是一种简单的方法:

    usort( $array['name'], function($a, $b) {
        return ($a->priority < $b->priority) ? -1 : 1;
    });
    

    这只是比较数组元素之间的优先级值。如果没有,也许您可​​以增强您的示例以显示实际应该如何确定排序。

    编辑:基于已澄清的问题。

    由于您的数组结构,我不相信您将能够只使用 PHP 函数。

    首先,以更好的形式安排优先级:

    $priorities = array();
    foreach ($custom_order as $item) {
        $priorities[$item->field_id] = $item->priority;
    }
    

    然后将更新的优先级分配给 $default 项:

    $final_order = array();
    foreach ($default_order as $item) {
        $item->priority = $priorities[$item->type];
    }
    

    然后按照最初建议的排序以优先顺序排列它们:

    usort( $final_order['name'], function($a, $b) {
        return ($a->priority < $b->priority) ? -1 : 1;
    });
    

    【讨论】:

    • 对不起,也许我解释得不好。我用更合适的例子更新了我的问题。是的,“优先级”是我想使用的比较值。我希望根据设置为 $custom_order 的“优先级”对 $default_order 进行排序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多