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