在三列中显示php数组,第一行一个元素,第二行和第三行两个元素

时间:2019-02-04 11:55:57

标签: php arrays foreach

$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 :(得分:1)

尝试一下:

$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>';
}

答案 1 :(得分:0)

进行一些预整理,删除第一项,然后将其合并到其余的分块数组中。

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

答案 2 :(得分:0)

因为您没有在代码中使用$ 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>`;

答案 3 :(得分:0)

您可以尝试一下,

$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;
        }
    }
}