PHP:如何将3个数组排序到1个数组中并重新排序数组

3

我需要将3个数组合并为1个新数组,并按照一种方式对新数组进行排序,使第二个数组的第一个条目跟随第一个数组的第一个条目。

例如:

$array1 = array(dog, cat, mouse);
$array2 = array(table, chair, couch);
$array3 = array(car, bike, bus);

这些数组应该得到以下数组:
$resultarray = array(dog, table, car, cat, chair, bike, mouse, couch, bus);

非常感谢您的回复!
3个回答

8
你所需要的只有:
$resultarray = array();
foreach(array_map(null, $array1, $array2, $array3) as $set) {
    $resultarray = array_merge($resultarray, $set);
}
print_r($resultarray);

输出

Array
(
    [0] => dog
    [1] => table
    [2] => car
    [3] => cat
    [4] => chair
    [5] => bike
    [6] => mouse
    [7] => couch
    [8] => bus
)

查看实时演示

或者简单的一行解决方案 - @deceze

call_user_func_array('array_merge', array_map(null, $array1, $array2, $array3));

One Line DEMO


5
call_user_func_array('array_merge', array_map(null, $array1, $array2, $array3)) зҡ„дёӯж–Үзҝ»иҜ‘жҳҜпјҡдҪҝз”Ё array_map еҮҪж•°е°Ҷ $array1гҖҒ$array2 е’Ң $array3 дёӯзҡ„еҜ№еә”е…ғзҙ з»„жҲҗж–°ж•°з»„пјҢеҶҚдҪҝз”Ё call_user_func_array еҮҪж•°и°ғз”Ё array_merge еҮҪж•°е°Ҷж–°ж•°з»„еҗҲ并дёәдёҖдёӘж•°з»„гҖӮ - deceze
1
非常优雅!如果没有你的答案,双重循环就可以完成它了。 - Aralicia
感谢您的快速回复。 当我使用多维数组时,我也可以使用您的解决方案吗:$array = array(array(dog, cat, mouse),array(table, chair, couch),array(car, bike, bus)); - Teus Louwerens
这取决于您所需的输出和现有的多维数组结构,情况会有所不同。 - Baba
@TeusLouwerens,您只需要使用...(splat operator)来“展开”多维数组,即可实现合并。array_merge(...array_map(null, ...$multi)) - mickmackusa

2
尝试这个:
$array1 = array('dog', 'cat', 'mouse');
$array2 = array('table', 'chair', 'couch');
$array3 = array('car', 'bike', 'bus');

$result = call_user_func_array('array_merge', call_user_func_array('array_map', array(null,$array1,$array2,$array3)));

echo "<pre>";
print_r($result);

编辑:根据deceze的评论:

$result = call_user_func_array('array_merge', array_map(null,$array1,$array2,$array3));

内部的call_user_func_array已被移除。

输出:

Array
(
    [0] => dog
    [1] => table
    [2] => car
    [3] => cat
    [4] => chair
    [5] => bike
    [6] => mouse
    [7] => couch
    [8] => bus
)

3
那个内部的 call_user_func_array 是多余的。 - deceze
@deceze: 那只是将数组进行转置。 - Prasanth Bendra
可以轻松地编写为 array_map(null,$array1,$array2,$array3) 以达到相同的效果。 - deceze
@deceze:哦,是的,谢谢你提供的信息,我会在我的回答中加上它 :) - Prasanth Bendra

1

只需另一行解决方案:

$result = array_reduce(array_map(null, $array1, $array2, $array3), 'array_merge', array());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接