【问题标题】:PHP-ILooping an arrays values through a larger arrayPHP-IL通过更大的数组循环数组值
【发布时间】:2009-12-21 23:25:25
【问题描述】:
我想知道是否可以获取一个数组并将数组的值多次插入更大的数组中,以便较小数组的值填满更大的数组。
假设 array1 有值 ([0 => 'a'],[1 => 'b'],[2 => 'c']),array2 可以容纳 8 个值。那么,我将如何获取 array1 的值并将它们连续插入 array2 直到 array2 空间不足,这样 array2 将具有值'a','b','c','a','b', 'c','a','b'?
提前致谢,
~侯赛因~
【问题讨论】:
标签:
php
arrays
insert
loops
【解决方案1】:
本质上,您希望循环遍历小数组,将每个元素添加到新数组中,直到达到所需的大小。
考虑一下:
$max = 8;
$Orig_Array = array('a', 'b', 'c');
$Next_Array = array();
while True
{
foreach($Orig_Array as $v)
{
$Next_Array[] = $v;
if(count($Next_Array) >= $max)
break 2;
}
}
【解决方案2】:
假设您的输入数组是按顺序索引的:
$len = count($input);
$output = array();
for ($i = 0; $i < MAX_SIZE; ++$i)
$output[] = $input[$i % $len];
【解决方案3】:
$a = array('a','b','c');
$desired = 8;
$b = array();
for($i=0;$i<($desired/count($a))+1;++$i) $b = array_merge($b,$a);
array_splice($b,$desired);
或者
$a = array('a','b','c');
$desired = 8;
$b = array();
for($i=0;$i<$desired/count($a);++$i) $b = array_merge($b,$a);
for($i=0;$i<($desired-count($b)-1);++$i) $b[] = $a[$i];
第一个填充一个数组,使其具有至少所需数量的元素,并切断其余元素。第二个以所需的元素数以原始数组大小为模填充一个数组,然后将其余部分相加。
【解决方案4】:
这是一个使用输入数组的内部指针,以保持概念上的简单:
$input = array(1, 2, 3);
$size = 32;
$output = array();
for ( $i = 0; $i < $size; $i++ ) {
$curr = current($input);
if ( $curr === false ) {
reset($input);
$curr = current($input);
}
$output[] = $curr;
next($input);
}
print_r($output);die;