Array_chunk + последний эелемент массива дублируется в первый следующего?
Всем большое спасибо, если кому либо необходимо решение, можно использовать любое из представленных. Немного результатов (на верность их не претендую, специальных условий никаких не делал, заливал просто на рабочий vds 1vcpu/1ram/ssd nvme):

как шаблон
<?php
$start = microtime(true);
$i = 0;
while ($i <= 100000)
    $array[] = '127.0.0.' . $i++;

//здесь предложенный код

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';


nokimaro
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $chunks = array_chunk($array, 4);

    foreach($chunks as $key => $vals)
    {
        $next_chunk_key = $key+1;
        if(isset($chunks[$next_chunk_key]))
        {
            //добавляем в начало след. чанка последний элемент текущего чанка
            array_unshift($chunks[$next_chunk_key], end($vals));
        }
    }

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



Compolomus
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $result = []; // результат
    $len = 4; // длинна первого массива (менять для экспериментов)
    $c = ceil(count($array) / $len) - 1; // количество итераций
    $result[] = array_slice($array, 0, $len); // первый срез
    $offset = $len - 1; // смещение для первой итерации
    for (++$len, $j = 0, $i = 0; $i < $c; $i++, $offset += $len - 1, $j += $len) {
        $result[] = array_slice($array, $offset, $len);
    }

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



GogElf
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $chunks = [];
    while($array){
      $current = array_splice($array, 0, 4);
      if(isset($old))
        array_unshift($current, $old);
      $old = end($current);
      $chunks[] = $current;
    };

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



мой вариант
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $array = array_chunk($array, 3);
    $count = count($array);
    for ($i = 0; $i < $count; $i++) {
        $lastip = end($array[$i]);
        if ($i < $count - 1)
            array_unshift($array[$i + 1], $lastip);
    }


var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';


<?php
$array = [
  '127.0.0.1',
  '127.0.0.2',
  '127.0.0.3',
  '127.0.0.4',
  '127.0.0.5',
  '127.0.0.6',
  '127.0.0.7',
  '127.0.0.8',
  '127.0.0.9',
];

$chunks = array_chunk($array, 4);

foreach($chunks as $key => $vals)
{
    $next_chunk_key = $key+1;
    if(isset($chunks[$next_chunk_key]))
    {
        //добавляем в начало след. чанка последний элемент текущего чанка
        array_unshift($chunks[$next_chunk_key], end($vals));
    }
}

print_r($chunks);