как говорит заголовок, я хочу разделить массив на три и отобразить результаты каждый в одной строке.
В JS нет проблем:
const array = [1,2,3,4,5,6,7];
let i, arr, j;
for (i = 0; i < array.length; i += 3) {
arr = array.slice(i, i + 3);
let div = document.createElement("div");
div.classList.add('row');
for (j = 0; j < arr.length; j++) {
let par = document.createElement("p");
let res = document.createTextNode(arr[j]);
par.appendChild(res);
div.appendChild(par);
}
document.body.appendChild(div);
}
Как правильно:
<div class="row">
<p>1</p>
<p>2</p>
<p>3</p>
</div>
<div class="row">
<p>4</p>
<p>5</p>
<p>6</p>
</div>
<div class="row">
<p>7</p>
</div>
В PHP с этим:
<?php
$array = [1,2,3,4,5,6,7];
for ($i = 0; $i < count($array); $i += 3) :
$arr = array_slice($array, $i, $i + 3);
?>
<div class="row">
<?= implode(" ", $arr); ?>
</div>
<?php endfor; ?>
Я получил:
<div class="row">
<p>1</p>
<p>2</p>
<p>3</p>
</div>
<div class="row">
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
</div>
<div class="row">
<p>7</p>
</div>
Я всегда ошибаюсь в среднем ряду (даже если вы увеличиваете массив $), что мне не хватает? : /
Третий параметр array_slice()
это длина, а не конечная точка, поэтому измените ее на …
$arr = array_slice($array, $i, 3);
Аргументы array_slice
в PHP и slice
в JS не совсем то же самое. PHP берет начало и длину, тогда как JS берет начало и конец.
PHP:
array_slice(array $array, int $offset, int $length = NULL);
JS:
arr.slice(begin, end)
Таким образом, вы не можете просто скопировать реализацию из одного в другое. Если вы измените свою строку PHP на:
$arr = array_slice($array, $i, 3);
(просто указав длину 3 вместо $ я + 3), то должно работать правильно.
В качестве альтернативы в PHP, вы можете просто использовать array_chunk
, и зациклите получающиеся куски.
Вы можете использовать array_chunk () в php
<?php
$array = [1,2,3,4,5,6,7];
echo "<pre>";
print_r(array_chunk($array, 3));
?>
Там уже array_chunk
функция:
$chunks = array_chunk($array, 3);
foreach ($chunks as $chunk) {?>
<div class="row">
<?= implode(" ", $chunk); ?>
</div>
<?php
}
использование array_chunk ().
$array = [1,2,3,4,5,6,7];
$chunks = array_chunk($array, 3);
foreach ($chunks as $chunk) {
// Do whatever you want with chunks: e.g.:
implode(" ", $chunk);
}