我有两个数组:
有一个例外:
array('dog', 'cat', 'macbook')
另一个包含所有值:
array('computer', 'mom', 'cat', 'dog')
我想按以下顺序获取排序数组:
array('dog', 'cat', 'computer', 'mom') // first with exception order and another elements alphabetically
怎么做?
答案 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);