我正在尝试组合两个数组,但第二个数组在第一个数组中均匀分布。如果有一个很好的循环解决方案,我正在尝试解决我只是构建一个新数组的问题,我愿意不合并它们。
数组1看起来像这样:
$array_1 = array(
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat')
);
数组2看起来像:
$array_2 = array(
array('dog'),
array('dog'),
array('dog'),
array('dog')
);
我想将这些合并为一个。唯一的踢球者是我想在数组1中均匀地分隔出数组2.为了说明我的问题,这就是它大致想要的:
$array_1 = array(
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('dog'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('dog'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('dog'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('cat'),
array('dog'),
array('cat'),
array('cat'),
array('cat')
);
这也需要是动态的,因为我们不知道数组1或2的大小(它们会随时间变化)。它需要考虑奇数或偶数,并尽可能完美地分布。唯一真正的常量是数组2总是比数组1短。
重复阵列猫和狗仅用于说明目的。这些数组的实际值可以是任何东西,所以假设每个数组都是它自己的。
答案 0 :(得分:1)
您可以使用以下功能。我假设两个数组中的元素可能具有不同的值,并且可能不会对数组键进行排序。
function distribute($container, $distributed) {
// reindex arrays
$container = array_values($container);
$distributed = array_values($distributed);
$containerSize = count($container);
$distributedSize = count($distributed);
$partSize = floor($containerSize / $distributedSize);
$newArray = array();
$distributedKey = 0;
$newArrayKey = 0;
foreach ($container as $containerKey => $containerValue) {
if (($containerKey >= $partSize) && (($containerKey % $partSize) == 0)) {
$newArray[$newArrayKey] = $distributed[$distributedKey][0];
$distributedKey++;
$newArrayKey++;
}
$newArray[$newArrayKey] = $container[$containerKey][0];
$newArrayKey++;
}
return $newArray;
}
答案 1 :(得分:0)
可以有很多答案,但另一种方法是使用array_chunk
,相应地划分/分配它们,然后将第二个数组的每个内容推入其中。当然,在将它们分块之后,你需要再将它们弄平。
$data = array_chunk($array_1, floor(count($array_1) / count($array_2)));
$result = array();
foreach($data as &$d) {
if(!empty($array_2)) {
$d[] = array_shift($array_2); // push inside the batch
}
$result = array_merge($result, $d); // flatten
}
答案 2 :(得分:0)
我知道它很脏,但它确实有用。所以我愿意做出贡献:
$catCount = count($array_1);
$dogCount = count($array_2);
$offset = $catCount / $dogCount;
for ($i = 0; $i < $dogCount; $i++) {
array_splice($array_1, ($offset * ($i + 1)), 0, array($array_2[$i]));
}
奇怪的是,第二个数组需要包装在一个数组中,否则它不会将其作为嵌套数组插入。希望这能让你走上正轨。