javascript — массив массивов на три в PHP (в JS это работает)

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

В 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>

Я всегда ошибаюсь в среднем ряду (даже если вы увеличиваете массив $), что мне не хватает? : /

0

Решение

Третий параметр array_slice() это длина, а не конечная точка, поэтому измените ее на …

$arr = array_slice($array, $i, 3);
2

Другие решения

Аргументы 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, и зациклите получающиеся куски.

1

Вы можете использовать array_chunk () в php

<?php
$array = [1,2,3,4,5,6,7];
echo "<pre>";
print_r(array_chunk($array, 3));

?>
1

Там уже array_chunk функция:

$chunks = array_chunk($array, 3);
foreach ($chunks as $chunk) {?>
<div class="row">
<?= implode(" ", $chunk); ?>
</div>
<?php
}
1

использование 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);
}
0
По вопросам рекламы [email protected]