使用其他数组异常对数组排序

时间:2016-12-17 14:00:37

标签: php arrays sorting

我有两个数组:

有一个例外:

array('dog', 'cat', 'macbook')

另一个包含所有值:

array('computer', 'mom', 'cat', 'dog')

我想按以下顺序获取排序数组:

array('dog', 'cat', 'computer', 'mom') // first with exception order and another elements alphabetically

怎么做?

3 个答案:

答案 0 :(得分:1)

这是我的代码

$exceptions =       array('dog', 'cat', 'macbook');
$main_arr =         array('computer', 'mom', 'cat', 'dog');
$temp = [];
$result_arr = [];
foreach($exceptions as $k => $v){
    if(in_array($v, $main_arr)){
        $result_arr[] = $v; // adding in result array which matches exceptions with main array
        unset($main_arr[array_search($v,$main_arr)]); // unsetting from main array with matches with exception array
    }
}
$main_arr = array_values(array_filter($main_arr)); // correcting indexing of main array

$result_arr = array_merge($result_arr, $main_arr);
print_r($result_arr);

您可以像这样编写自定义代码,无论如何此代码都可以使用

答案 1 :(得分:0)

将差异和交集结合起来:

<?php
$seq = array('dog', 'cat', 'macbook');
$data = array('computer', 'mom', 'cat', 'dog');
array_merge(array_intersect($seq, $data), array_diff($data, $seq));

答案 2 :(得分:0)

以下代码确实将值中包含的异常(与$exceptions中的顺序相同)与排除异常的值组合在一起。

$exceptions = ['dog', 'cat', 'macbook'];
$values = ['computer', 'mom', 'cat', 'dog'];

sort($values);
$values = array_merge(
    array_intersect($exceptions, $values),
    array_diff($values, $exceptions)
);

除非你有更多的例外列表,否则我不会打扰sort对所有值进行操作。然后,解决方案可能会被重写为:

$exceptSlice = array_intersect($exceptions, $values);
$valuesSlice = array_diff($values, $exceptSlice);
sort($valuesSlice);
$values = array_merge($exceptSlice, $valuesSlice);