PHP:根据另一个数组对数组进行排序

时间:2015-03-05 18:19:28

标签: php arrays sorting

我在php中有问题,我尝试搜索但我只是更困惑。我需要使用" priority"根据另一个数组对数组进行排序。核心价值。

这是我需要过滤的顺序。

$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,通过阅读其他有关它的文章我会更加困惑。任何人都可以解释一下我将如何以这种方式对数组进行排序?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

如果优先级是实际的排序标准,则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;
});