Задать вопрос
@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/ >.
Большое спасибо.
  • Вопрос задан
  • 10618 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 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
Кратко не получится
не проще ли проверять деленее нацело ?)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы