根据另一个关联数组的键顺序,按其键对平面关联数组进行排序
我有两个数组。
一个是较大的数据位:
Array
(
[12] => blah
[36] => foo
[58] => blah
[60] => blah
[72] => blah
[90] => bar
)
另一个是不同顺序的不同但相关数据的较小子集,每个键对应于较大数组中的相同键:
Array
(
[36] => foo data
[90] => bar data
[12] => blah data
)
现在,我的问题是,如何获取第一个数组采用这样的顺序,以便第一个数组中的键在第二个数组中具有对应的键将首先出现,并且顺序与第二个数组相同?
因此,像这样:
Array
(
[36] => foo
[90] => bar
[12] => blah
[58] => blah
[60] => blah
[72] => blah
)
I have two arrays.
One is a larger bit of data:
Array
(
[12] => blah
[36] => foo
[58] => blah
[60] => blah
[72] => blah
[90] => bar
)
The other is a smaller subset of different but related data in a different order, with each key corresponding to the same key in the larger array:
Array
(
[36] => foo data
[90] => bar data
[12] => blah data
)
Now, my question is, how do I get the first array to be in such an order so that the keys in the first array that have corresponding keys in the second array will appear first and in the same order as the second array?
Thus, like this:
Array
(
[36] => foo
[90] => bar
[12] => blah
[58] => blah
[60] => blah
[72] => blah
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
简单的 O(n) 解决方案。
输出:
Simple O(n) solution.
Output:
这是一个使用带有闭包的 uksort 的示例,我认为它在大数组上应该更有效,但我还没有做任何基准测试,所以......很难真正确认没有测试。
结果:
如果你不能使用闭包(php <5.3),你可以使用全局来做类似的事情,但它根本不干净。
Here's an example using uksort with closure, it should be more effective on big array i think, but i haven't done any benchmark so... difficult to really confirm w/o test.
result:
If you can't use closure (php <5.3) you can do something similar using a global but it's not clean at all.
使用
uksort
编辑:修复了 malko 指出的语法/逻辑错误。谢谢。
开始时干净整洁,但最终却变得丑陋且不清楚。我现在倾向于其他一些答案而不是我的答案。
use
uksort
edit: fixed syntax/logic errors pointed out by malko. thank you.
This started off nice and clean, but ended up pretty ugly and unclear. I now I'm leaning toward some of the other answers rather than mine.
输出:
请参阅数组运算符了解数组的
+
。Output:
See Array Operators for the
+
for arrays.由于
$sorted_array
数据的所有键都可以在$array_to_sort
中找到,因此您不需要排序算法。只需将$sorted_array
的整个有效负载替换为$array_to_sort
的整个有效负载即可。 PHP 在替换值时将遵循第一个数组的键顺序,然后附加其他未提及的关联元素。代码:(演示)
是的,就是这么简单。
如果您的排序数组可能包含在要排序的数组中找不到的键,那么使用带有
uksort()
的查找数组是明智的。 (演示)我的上述脚本都不能保证异常值按升序排序。如果需要,请添加辅助排序规则。 (演示)
Because all keys of your
$sorted_array
data are found in the$array_to_sort
, you don't need a sorting algorithm. Just replace the entire payload of$sorted_array
with the entire payload of$array_to_sort
. PHP will honor the first array's key order while replacin values, then will append the other unmentioned associative elements.Code: (Demo)
Yes, it is just that simple.
If your sorting array may have keys that are not found in the array to be sorted, then leveraging a lookup array with
uksort()
is sensible. (Demo)Neither of my above scripts guarantee that the outliers are sorted ascending. If this is needed, add a secondary sorting rule. (Demo)