我有一个逗号分隔的字符串/数组:
$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
我已经找到This Solution但它不适用,因为我没有处理数组中的键。
答案 0 :(得分:4)
无需进行任何花哨的排序算法。你可以这样做:
array_intersect($order, $input);
这将返回一个数组,其中包含$order
所有$input
的值$order
。值得庆幸的是,此函数将原始顺序保留在array_intersect()
。
注意:$order
的参数顺序很重要。确保首先传递$input
,因为这是您的参考数组,然后传入$out = query session | findstr console # good
$consoleuser = $out.split('\s+')[1] # doesn't work
,就像上面的示例一样。否则它会反过来,这不是你想要的。
答案 1 :(得分:0)
我没有测试过,但可能对
有用 function orderByOtherArray($input, $orderedArray){
$orderedInput = array();
foreach($orderedArray as $key => $value){
if(in_array($value, $input)){
$orderedInput[] = $value;
if(($key = array_search($value, $input)) !== false) {
unset($input[$key]);
}
}
}
foreach($input as $key => $value){
$orderedInput[] = $value;
}
return $orderedInput;
}