2016-12-17 31 views
1

我有,例如两个数组:排序阵列与其他阵列例外

一个例外:

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

,另一个的所有值:

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

我想获得排序按以下顺序排列:

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

如何做到这一点?

+0

usort允许自定义回调。 – Devon

+0

你不想让macbook进来结果数组? – rahulsm

+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); 

你可以写这样的自定义代码,反正这个代码将工作

0

结合差分交集的,因为这:

<?php 
$seq = array('dog', 'cat', 'macbook'); 
$data = array('computer', 'mom', 'cat', 'dog'); 
array_merge(array_intersect($seq, $data), array_diff($data, $seq)); 
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);