基于其他阵列的订单数组

时间:2016-10-25 21:42:13

标签: php arrays

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

$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但它不适用,因为我没有处理数组中的键。

2 个答案:

答案 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 ,就像上面的示例一样。否则它会反过来,这不是你想要的。

更多信息:http://php.net/manual/en/function.array-intersect.php

答案 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;
    }