$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
,但是对于第一个循环,我只需要一个元素而不是两个,这就是为什么我认为我不能这样做。
答案 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;
}
}
}