这是数组
$array = [
a=>["name"= "name1", "id"="1"..],
b=>["name"= "name2", "id"="2"..],
c=>["name"= "name3", "id"="3"..],
d=>["name"= "name4", "id"="4"..],
e=>["name"= "name5", "id"="5"..],
f=>["name"= "name6", "id"="6"..],......);
我想要实现的是 foreach循环可回显此类项目
这是我所做的,但没有运气
$len = count($moduleTypes);
$firsthalf = array_slice($moduleTypes, 0, $len / 2);
$secondhalf = array_slice($moduleTypes, $len / 2);
中断数组并分别回显每个数组, Foreach循环必须继续,但是在第二次迭代中,它需要循环两次[B,C],下一次迭代一次[D],依此类推..检查图像的视角
答案 0 :(得分:1)
这不是确切的解决方案,但会精确到可以在html代码中实现的逻辑
<?php
$array = array(1,2,3,4,5,6,7);
$counter = 1;
$temp = "";
foreach($array as $val){
if($temp == 1){
echo "E$val<br>";
$temp=0;
$counter++;
}else{
if($counter % 2 == 0){
echo "E$val<br>";
$temp = 1;
}else{
echo "O$val<br>";
}
}
$counter++;
}
O / p赞
O1
E2
E3
O4
E5
E6
O7
O
是A,D,G
的地方
而E
是B,C,E,F
更新
foreach($array as $key => $val){
if($temp == 1){
echo "E".$val['name']."<br>";
$temp=0;
$counter++;
}else{
if($counter % 2 == 0){
echo "E".$val['name']."<br>";
$temp = 1;
}else{
echo "O".$val['name']."<br>";
}
}
$counter++;
}
答案 1 :(得分:1)
我认为这就是你需要的
for ($i = 1; $i <= count($array); $i = $i + 3) {
echo '<br>';
echo '-' . $array[$i-1] . '-';
if (!isset($array[$i])) break;
echo '<br>';
echo $array[$i] . ' ';
if (!isset($array[$i+1])) break;
echo $array[$i+1];
}
您可以在这里http://sandbox.onlinephpfunctions.com/code/b3fba97df75b235b1acccacf82b800e21f3924f5
答案 2 :(得分:0)
<?php
$array = [
"a"=>["name"=> "name1", "id"=>"1"],
"b"=>["name"=> "name2", "id"=>"2"],
"c"=>["name"=> "name3", "id"=>"3"],
"d"=>["name"=> "name4", "id"=>"4"],
"e"=>["name"=> "name5", "id"=>"5"],
"f"=>["name"=> "name6", "id"=>"6"]
];
$keys = array_keys($array);
foreach(array_keys($array) as $i => $key) {
switch($i % 3) {
case 2: // case: 3rd values
continue;
break;
case 1: // case: 2nd values
$nextkey = $keys[$i + 1];
// show $key and $nextkey
print_r($array[$key]);
if( $array[$nextkey] ) {
print_r($array[$nextkey]);
}
echo "---\r\n"; // delimiter
break;
default:
// case: very first and every 4th values
print_r($array[$key]);
echo "---\r\n"; // delimiter
}
}
您可以使用array_keys,然后像使用for循环一样使用index-value。我不知道您为什么要使用foreach循环。 For循环似乎对此更好。 switch-case
可以使其更具可读性,您可以对案件进行评论。
答案 3 :(得分:0)
棘手的部分是HTML表。恭喜我成功nerd sniping。
<?php
$arr = ['A','B','C','D','E','F','G','H','I','J','K','L'];
$second_row = [];
$first_row_next = 1;
echo "<table border='1'>";
echo "<tr>";
for($i=0;$i<count($arr);$i++){
if($i%3 == 0){
echo "<td rowspan='2'>$arr[$i]</td>"; // belongs to the first row with rowspan
}else if($i == $first_row_next){
echo "<td>$arr[$i]</td>";// belongs to first row with no rowspan since it's other subordinate will come down under it.
$first_row_next += 3;
}else{
$second_row[] = $arr[$i];
}
}
echo "</tr>";
echo "<tr><td>".implode("</td><td>",$second_row)."</td></tr>";
echo "</table>";
输出:
它生成以下HTML表:
<table border='1'>
<tr>
<td rowspan='2'>A</td>
<td>B</td>
<td rowspan='2'>D</td>
<td>E</td>
<td rowspan='2'>G</td>
<td>H</td>
<td rowspan='2'>J</td>
<td>K</td>
</tr>
<tr>
<td>C</td>
<td>F</td>
<td>I</td>
<td>L</td>
</tr>
</table>
算法:
A
,B
,D
,E
,G
,H
,J
,K
。C
,F
,I
,L
。if($i%3 == 0)
。$first_row_next
对其进行跟踪,并相应地输出td
数据。HTML表的工作方式
:第一行是:
<tr>
<td rowspan='2'>A</td>
<td>B</td>
<td rowspan='2'>D</td>
<td>E</td>
<td rowspan='2'>G</td>
<td>H</td>
<td rowspan='2'>J</td>
<td>K</td>
</tr>
这将生成第一行。到目前为止,一切都很好。 第二行是:
<tr>
<td>C</td>
<td>F</td>
<td>I</td>
<td>L</td>
</tr>
呈现方式是:
C
时,它将在A
中寻找空间,但没有得到空间,因此移至下一列。它进入B
,因此被附加。 F
,它找到一个td
的空间,该空间要添加到E
的下面,依此类推。