按另一个值优先级数组对数组进行排序,该数组可能比原始输入数组具有更多值[重复]

问题描述 投票:0回答:2

我有一个逗号分隔的字符串/数组:

$input = "facebook,steam,tumblr,email,instagram,twitter,twitch,youtube,pinterest,amazon,disqus";
$input = explode(",", $input);

我想根据另一个数组进行排序:

$order = "email,facebook,instagram,twitter,twitch,youtube,steam,pinterest,tumblr,amazon,disqus";
$order = explode(",", $order);

$input
将始终包含
$order
中的值,我希望它根据
$order
中的顺序进行排序。这有点棘手,因为
$input
将仅包含
$order
中的值的子集。

例如,输入

twitter,twitch,email,facebook
将返回
email,facebook,twitter,twitch


我已经找到了这个解决方案,但它不适用,因为我没有处理数组中的键。

php arrays sorting custom-sort
2个回答
9
投票

无需执行任何花哨的排序算法。你可以这样做:

array_intersect($order, $input);

这将返回一个数组,其中包含存在的

$order
的所有值。值得庆幸的是,这个函数保持了原始顺序
$input

注意:
$order

的参数顺序很重要。确保首先传入

array_intersect()
,因为这是您的参考数组,然后传入
$order
,就像上面的示例一样。否则会适得其反,这不是你想要的。

更多信息:

http://php.net/manual/en/function.array-intersect.php


0
投票

$input

© www.soinside.com 2019 - 2024. All rights reserved.