php根据存在于其他数组中的键对关联数组进行排序
我有这个数组php根据存在于其他数组中的键对关联数组进行排序,php,arrays,associative,Php,Arrays,Associative,我有这个数组 $myArray=array( 'a'=>array('id'=>1,'text'=>'blabla1'), 'b'=>array('id'=>2,'text'=>'blabla2'), 'c'=>array('id'=>3,'text'=>'blabla3'), 'd'=>array('id'=>4,'text'=>'blabla4'), ); 我想按另一个数组中的键a、b、c、d对上面的数组进行排序:
$myArray=array(
'a'=>array('id'=>1,'text'=>'blabla1'),
'b'=>array('id'=>2,'text'=>'blabla2'),
'c'=>array('id'=>3,'text'=>'blabla3'),
'd'=>array('id'=>4,'text'=>'blabla4'),
);
我想按另一个数组中的键a、b、c、d对上面的数组进行排序:
$tempArray=array('c','a','d','b');
我如何才能做到这一点,使$myArray
看起来像这样:
$myArray=array(
'c'=>array('id'=>3,'text'=>'blabla3'),
'a'=>array('id'=>1,'text'=>'blabla1'),
'd'=>array('id'=>4,'text'=>'blabla4'),
'b'=>array('id'=>2,'text'=>'blabla2'),
);
谢谢你帮助我 执行此操作的最简单且可能最有效的方法是迭代保存排序顺序的数组并创建一个新的排序数组:
$sorted = array();
foreach ($tempArray as $order) {
if (isset($myArray[$order])) {
$sorted[$order] = $myArray[$order];
}
}
print_r($sorted);
这是因为关联数组隐式地具有元素添加到数组的顺序
编辑 任何涉及排序功能的解决方案都可能比这效率低得多。这是因为为了做到这一点,您需要使用一个接受回调的函数——这已经隐含了函数调用的开销
排序功能还通过比较项目来工作,这意味着这些解决方案中的任何一个的复杂性都将大于此解决方案的复杂性(其复杂性只是
O(n)
)。此外,为了导出排序函数的返回值,您需要检查目标数组,找到每个要比较的键的位置,每次比较都会增加复杂性。最简单、可能也是最有效的方法是迭代保存排序顺序的数组并创建新的,排序数组:
$sorted = array();
foreach ($tempArray as $order) {
if (isset($myArray[$order])) {
$sorted[$order] = $myArray[$order];
}
}
print_r($sorted);
这是因为关联数组隐式地具有元素添加到数组的顺序
编辑 任何涉及排序功能的解决方案都可能比这效率低得多。这是因为为了做到这一点,您需要使用一个接受回调的函数——这已经隐含了函数调用的开销
排序功能还通过比较项目来工作,这意味着这些解决方案中的任何一个的复杂性都将大于此解决方案的复杂性(其复杂性只是
O(n)
)。此外,为了导出排序函数的返回值,您需要检查目标数组,找到每个要比较的键的位置,每次比较都会增加复杂性。您是否尝试过array\u shift()
?我不知道array\u shift有何帮助,但是uksort我想你试过array\u shift()
?我不知道array\u shift有什么帮助,但是uksort我想can@MikeB他就是这样needs@jBaron你应该把它写在你的问题中;-)@jBaron任何涉及排序函数的解决方案都可能比这效率低得多。这是因为为了做到这一点,您需要使用一个接受回调的函数——这已经隐含了函数调用的开销。排序功能还通过比较对象来工作,这意味着这些解决方案中的任何一个的复杂性都将大于此解决方案的复杂性(O(n)
)。此外,为了导出排序函数的返回值,您需要检查每次比较的目标数组,这会增加更多的复杂性。对于1000个条目,您建议不要使用uksort?@jBaron。由于快速排序的工作方式,您拥有的条目越多,排序函数的效率就越低。这将执行的操作不超过$tempArray
中的元素数,而排序函数将执行更多操作,而不仅仅是少数元素。比较(4项)和(5项)。您可以看到,通过向目标数组添加一个以上的项,它(可能)添加了相当多的迭代。只有当元素已经按正确的顺序排列时才会出现这种情况。@MikeB uksort就是他所说的needs@jBaron你应该把它写在你的问题中;-)@jBaron任何涉及排序函数的解决方案都可能比这效率低得多。这是因为为了做到这一点,您需要使用一个接受回调的函数——这已经隐含了函数调用的开销。排序功能还通过比较对象来工作,这意味着这些解决方案中的任何一个的复杂性都将大于此解决方案的复杂性(O(n)
)。此外,为了导出排序函数的返回值,您需要检查每次比较的目标数组,这会增加更多的复杂性。对于1000个条目,您建议不要使用uksort?@jBaron。由于快速排序的工作方式,您拥有的条目越多,排序函数的效率就越低。这将执行的操作不超过$tempArray
中的元素数,而排序函数将执行更多操作,而不仅仅是少数元素。比较(4项)和(5项)。您可以看到,通过向目标数组添加一个以上的项,它(可能)添加了相当多的迭代。只有当元素已经按正确的顺序排列时,才会出现这种情况。