@sz9

Как отделить каждый 4-ый элемент массива?

$_array = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);

Добрый вечер. Есть массив, и нужно вывести в вот таком вот порядке числа:
1 5 9
2 6 10
3 7 11
4 8 12

и т.д. То есть получается, после каждого четвертого элемента поставить < br/ >.
Большое спасибо.
  • Вопрос задан
  • 10537 просмотров
Решения вопроса 1
rdifb0
@rdifb0
Программист, реалист
array_chunk разобьет массив на части, все остальное уже зависит от способа вывода значений.

$array = array();
for($i = 1; $i <= 20; $i++) {
	$array[] = sprintf('%02d', $i);
}

$n = 4;
$chunks = array_chunk($array, $n);

$chunks_r = array();
foreach ($chunks as $i=>$chunk) {
	foreach ($chunk as $j=>$el) {
		$chunks_r[$j][$i] = $el;
	}
}

header('Content-Type: text/plain'); 

foreach ($chunks_r as $chunk) {
	foreach ($chunk as $el) {
		echo $el, ' ';
	}
	echo PHP_EOL;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@traims
Очевидно-школьное решение.

<?php 
for ($times=0; $times<4; $times++)
{ 
  for ($element=$times+1; $element<20; $element+=4)
  {
    echo " $element ";    
  } 
  echo "<br>";
}  
?>


Выводит текст:
1 5 9 13 17 
2 6 10 14 18 
3 7 11 15 19 
4 8 12 16
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Решение в лоб. Выведет вам любой массив в 4 ряда и n колонок.

для php 5.5+
$arr = range(1, 25);

$chunks = array_chunk($arr, 4);
$rows = array_map(function ($idx) use ($chunks) {
    return array_column($chunks, $idx);
}, range(0, 3));

echo implode("<br />", array_map(function ($row){
    return implode(', ', $row);
}, $rows));

echo "\n\n";


для php 5.3+
$arr = range(1, 25);

$chunks = array_chunk($arr, 4);
$rows = array_map(function ($idx) use ($chunks) {
    // fallback, так как array_column появился только в 5,5+
    return array_reduce($chunks, function ($column, $chunk) use ($idx) {
        if (!isset($chunk[$idx])) return $column;
	    array_push($column, $chunk[$idx]);
	    return $column;
    }, array());
}, range(0, 3));

echo implode("<br />", array_map(function ($row){
    return implode(', ', $row);
}, $rows));
Ответ написан
Комментировать
jone21
@jone21
Кратко не получится
не проще ли проверять деленее нацело ?)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽