Отображение массива php в три столбца, первый элемент, один ряд, второй и третий элемент, второй ряд - PullRequest
0 голосов
/ 04 февраля 2019
$b = 0;
foreach ($settings['items'] as $item){
    $b++;
    if ($b==1){
        $out .='First';
    } else{
        $out2 .='Second';
    }
 }

 echo '<div class="inner">'.$out.'</div>';
 echo '<div class="inner">'.$out2.'</div>';

который выводит

 <div class="inner">First</div>
 <div class="inner">Second Second Second Second</div>

Но я хотел бы иметь эту структуру

 <div class="inner">First</div>
 <div class="inner">Second Second</div>
 <div class="inner">Second Second</div>

Одно из возможных решений, которое я думал, использует array_slice Но для первого цикла янужен только один элемент, а не два, поэтому я думаю, что не могу этого сделать.

Ответы [ 4 ]

0 голосов
/ 04 февраля 2019

Вы можете попробовать это,

$b = 0;
for($j = 1; $j <= 2; $j++){
    $b++;
    for($i = 1; $i <= $b;$i++){
        switch($b){
            case '1': echo '<div class="inner">FIRST</div>';break;
            case '2': echo '<div class="inner">SECOND SECOND</div>';break;
        }
    }
}
0 голосов
/ 04 февраля 2019

Немного предварительно поссорившись, удалите первый элемент, а затем объедините его с оставшимся массивом.

<?php
$items   = array_fill(0, 5, 'foo'); // An array of five 'foo's.
$first   = array_shift($items);
$chunked = array_chunk($items, 2);
$chunked = array_merge([[$first]], $chunked);

var_dump($chunked);

foreach($chunked as $chunk)
{
    echo '<div class="inner">' . implode(' ', $chunk) . "</div>\n";
}

Вывод:

array(3) {
    [0]=>
    array(1) {
    [0]=>
    string(3) "foo"
    }
    [1]=>
    array(2) {
    [0]=>
    string(3) "foo"
    [1]=>
    string(3) "foo"
    }
    [2]=>
    array(2) {
    [0]=>
    string(3) "foo"
    [1]=>
    string(3) "foo"
    }
}
<div class="inner">foo</div>
<div class="inner">foo foo</div>
<div class="inner">foo foo</div>
0 голосов
/ 04 февраля 2019

Поскольку вы не используете значение $ settings ['items'] в коде, вы можете просто работать с длиной этого массива

$count = count($settings['items']);
if ($count--) echo `<div class="inner">First</div>`;
while($count > 1) {
   echo '<div class="inner">Second Second</div>';
   $count -= 2;
}
if ($count--) echo `<div class="inner">Second</div>`;
0 голосов
/ 04 февраля 2019

Попробуйте это:

$first = true;
$all = [];
$couples = [];
foreach ($settings['items'] as $item){
    if($first){
        $first = false;
        $first_out = 'First'; //or whatever
        $all[] = $first_out;
    }else{
        if(count($couples) == 2){
            $all[] = $couples;
            $couples = [];
        }
        $couples[] = 'Second';
    }
}
foreach($all as $value){
    echo '<div class="inner">'.implode(',', $value).'</div>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...