PHP-ILooping массив значений через больший массив - PullRequest
0 голосов
/ 22 декабря 2009

Я хочу знать, возможно ли взять массив и вставить значения массива в больший массив несколько раз, чтобы значения меньшего массива заполняли больший массив.

Скажем, array1 имеет значения ([0 => 'a'], [1 => 'b'], [2 => 'c']), а array2 может содержать 8 значений. Итак, как мне взять значения array1 и вставлять их в array2 непрерывно до тех пор, пока array2 не исчерпает пространство, чтобы массив2 имел значения 'a', 'b', 'c', 'a', 'b' 'с', 'а', 'б'?

Спасибо заранее, ~ Хуссейн ~

Ответы [ 4 ]

0 голосов
/ 22 декабря 2009

Вот один из них, использующий внутренний указатель входного массива, для простоты концептуально:

$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;
0 голосов
/ 22 декабря 2009

Предполагая, что ваш входной массив проиндексирован последовательно:

$len = count($input);
$output = array();
for ($i = 0; $i < MAX_SIZE; ++$i) 
  $output[] = $input[$i % $len];
0 голосов
/ 22 декабря 2009
$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];

Первый заполняет массив так, чтобы он имел , по крайней мере, желаемое количество элементов, и обрезает остальные. Второй заполняет массив до нужного количества элементов по модулю исходного размера массива и складывает остальные.

0 голосов
/ 22 декабря 2009

По сути, вы хотите циклически повторять небольшой массив, добавляя каждый элемент в новый массив, пока он не достигнет желаемого размера.

Учтите это:

$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;
    }
}
...