array_push使用索引并随机插入另一个数组

时间:2018-06-08 18:22:52

标签: php

我有两个数组,比如

$first = 
Array
(
  [0] => 1
  [1] => 2
  [2] => 3
  [3] => 4
  [4] => 5
  [5] => 6
)

$second = 

Array
(
  [0] => apples
  [1] => organges
  [2] => bananas
  [3] => peaches
)

但是,我想通过索引将第二个数组元素推送到第一个数组中。     像

$result = 
Array
(
  [0] => 1
  [1] => apples
  [2] => 2
  [3] => organges
  [4] => 3
  [5] => 4
  [6] => peaches
  [7] => 5
  [8] => 6
)

不改变第一个元素的顺序。请帮助我

1 个答案:

答案 0 :(得分:1)

你可以做一个简单的循环:

$result = [];
for($i=0; $i < count($first); $i++) {
    if(isset($first[$i])){$result[] = $first[$i];}
    if(isset($second[$i])){$result[] = $second[$i];}
}

如果您的数组具有可变大小,请首先比较它们的大小,然后使用更大的计数进行循环。

修改

然后考虑到你想要保存他们各自的顺序,但随机合并你可以扭曲前面代码的数组:

$result = [];
for($i=0; $i < count($first); $i++) {
    if(rand(0,1)) {
        if(isset($first[$i])){$result[] = $first[$i];}
        if(isset($second[$i])){$result[] = $second[$i];}
    } else {
        if(isset($second[$i])){$result[] = $second[$i];}
        if(isset($first[$i])){$result[] = $first[$i];}
    }
}

我承认它非常奇怪和扭曲,我确信可以做出更优化的东西(它很快完成),但问题本身就是奇怪的xD 我希望它会有所帮助:)。

编辑2:

事实上,第一次编辑只会替换A / B,对于完整的随机解决方案,仍然尊重两个阵列的相应顺序:

$result = [];
$end=count($first) + count($second);
$a=0;
$b=0;
for($i=0; $i < $end; $i++ {
    if(rand(0,1)) {
        if(isset($first[$a])) {
            $result[] = $first[$a];
            $a++;
        } elseif (isset($second[$b])) {
            $result[] = $second[$b];
            $b++;
        }
    } else {
        if(isset($second[$b])) {
            $result[] = $second[$b];
            $b++;
        } elseif (isset($first[$a])) {
            $result[] = $first[$a];
            $a++;
        }
    }
}