如何在PHP中以偶数顺序合并两个数组?

时间:2018-02-23 09:46:52

标签: php laravel

如何均匀合并这两个数组?谢谢。

$array1 = ['1','3','5'];
$array2 = ['2','4','6'];

// Output
['1','2','3','4','5','6']

我目前的做法

$items = [];
    $totalItem = count($array1) + count($array2);
    while ($totalItem > 0) {
        if (count($array1) > 0) {
            array_push($items, array_shift($array1));
        }
        if (count($array2) > 0) {
            array_push($items, array_shift($array2));
        }
        $totalItem -= 1;
    }

我实际上正在寻找一种更有效的方法。提前感谢你们提出的任何想法: - )

4 个答案:

答案 0 :(得分:1)

合并它们并使用asort如果您的值有一定程度的复杂性。

Stream<Byte>

答案 1 :(得分:1)

如果这些数组可以有不同的大小,有自定义键等,如果['1','2','3','4','5','6']只是一个简单的示例,值可以是任何类型的数据,请执行以下操作:

$result = [];

// Get rid of custom keys
$array1 = array_values($array1);
$array2 = array_values($array2);

$arrayCount = max(count($array1), count($array2));

for ($i = 0; $i < $arrayCount; $i++) {
    if (isset($array1[$i]) {
        $result = $array1[$i];
    }

    if (isset($array2[$i]) {
        $result = $array2[$i];
    }
}

答案 2 :(得分:0)

如果您正在使用数组,则可以使用

sort(array_merge($array1, $array2))

如果您正在使用Laravel,我强烈建议您查看Collections(可在此处找到文档https://laravel.com/docs/5.6/collections)。

使用集合,您可以调用

$collection1->merge($collection2)->sort();

您甚至可以将匿名函数作为参数传递给集合进行更复杂的排序。

$collection1->merge($collection2)->sort(function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
})

答案 3 :(得分:0)

所以,我不确定你是想要array_merge(); sort();还是'按照关键的顺序合并值'这样的答案,所以这两者都是。

首先简单,'合并 - &gt;排序'例子

$array1 = array('1', '5', '3');
$array2 = array('2', '4', '6');

// Perform a standard merge
$array = array_merge ($array1, $array2);
// $array looks like this:
// $array = ['1', '5', '3', '2', '4', '6'];    

// So sort it.
sort($array);

// And we get the following, note it will lose the key order.
// $array = ['1', '2', '3', '4', '5', '6'];

如果要在'key - &gt;中合并数组数组编号'顺序然后你可以做这样的事情:

function merge($array1, $array2) {
    $arrays = func_get_args();
    $lengths = array();
    $output = array();

    // First find the longest array.
    foreach ($arrays as $key => $array) {
        // Remove the keys.
        $arrays[$key] = array_values($array);

        // Find the length.
        $lengths[] = count($array);
    }

    // Get the dimensions.
    $length = max($lengths);
    $count = count($arrays);

    // For each element (of the longest array)
    for ($x = 0; $x < $length; $x++)

    // For each array
    for ($y = 0; $y < $count; $y++)

    // If the value exists
    if (isset($arrays[$y][$x]))

    // Add it to the output
    $output[] = $arrays[$y][$x];

    return $output;
}

$array1 = array('1', '5', '3');
$array2 = array('2', '4', '6');
$array = merge($array1, $array2);
/* Output: 
Array
  (
    [0] => 1
    [1] => 2
    [2] => 5
    [3] => 4
    [4] => 3
    [5] => 6
  )
*/

$array3 = array('a', 't', 'u', 'i', 'w');
$array = merge($array1, $array2, $array3);
/* Output: 
Array
  (
    [0] => 1
    [1] => 2
    [2] => a
    [3] => 5
    [4] => 4
    [5] => t
    [6] => 3
    [7] => 6
    [8] => u
    [9] => i
    [10] => w
  )
*/

我将以“我没有尝试过这段代码”来说明这一点,但它应该“尽我所能”。