这是我的数组
Array
(
[0] => Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => no
)
[1] => Array
(
[0] => 2
[1] => 2
[2] => 2
[3] => 2
[4] => yes
)
[2] => Array
(
[0] => 3
[1] => 3
[2] => 3
[3] => 3
[4] => yes
)
[3] => Array
(
[0] => 4
[1] => 4
[2] => 4
[3] => 4
[4] => no
)
[4] => Array
(
[0] => 5
[1] => 5
[2] => 5
[3] => 5
[4] => yes
)
)
这就是我试过的,我正在创建一个表tr部分,它所做的是为每个正在显示的记录复制自己。如何编写它以便正确显示?我知道它一定很简单,我不能绕过它。
<?php
$units = json_decode($tablerow);
foreach($units as $unit) : for($i=0;$i<=count($unit)-1;$i++) : ?>
<tr class="rows">
<td><input type='text' name='bedroom[]' value='<?=$unit[$i];?>' class='input-small'></td>
<td><input type='text' name='bath[]' value='<?=$unit[$i];?>' class='input-small'></td>
<td><input type='text' name='sqrt[]' value='<?=$unit[$i];?>' class='input-small'></td>
<td><input type='text' name='price[]' value='<?=$unit[$i];?>' class='input-small'></td>
<td>
<select name='avail[]' class='input-small'>
<option value='yes' <?=($unit[$i] == 'yes') ? 'selected="selected' : '';?>>Yes</option>
<option value='no' <?=($unit[$i] == 'no') ? 'selected="selected' : '';?>>No</option>
</select>
</td>
<td><button type="button" class="btn btn-danger btn-small removeRow">remove</button></td>
</tr>
<?php endfor; endforeach; ?>
答案 0 :(得分:0)
我认为你不需要for
循环,只需通过索引引用每个$unit
数组元素:
foreach($units as $unit) :?>
<tr class="rows">
<td><input type='text' name='bedroom[]' value='<?=$unit[0];?>' class='input-small'></td>
<td><input type='text' name='bath[]' value='<?=$unit[1];?>' class='input-small'></td>
<td><input type='text' name='sqrt[]' value='<?=$unit[2];?>' class='input-small'></td>
<td><input type='text' name='price[]' value='<?=$unit[3];?>' class='input-small'></td>
<td>
<select name='avail[]' class='input-small'>
<option value='yes' <?=($unit[4] == 'yes') ? 'selected="selected' : '';?>>Yes</option>
<option value='no' <?=($unit[4] == 'no') ? 'selected="selected' : '';?>>No</option>
</select>
</td>
<td><button type="button" class="btn btn-danger btn-small removeRow">remove</button></td>
</tr>
<?php endforeach; ?>
答案 1 :(得分:0)
你将loopy-dupy双重冒泡。
只需拿走foreach,取出里面的内容。删除$i
并将$units
替换为$unit
。另见http://php.net/foreach。
示例:
$units = json_decode($tablerow);
foreach ($units as $unit) : ?>
<tr class="rows">
<td><input type='text' name='bedroom[]' value='<?=$unit[0];?>' class='input-small'></td>
<td><input type='text' name='bath[]' value='<?=$unit[1];?>' class='input-small'></td>
...
子值(例如卧室,浴室)与$unit
中的索引之间存在固定(1:1)的关系。你可以对它进行硬编码(卧室= 0,浴室= 1,......)。
您还可以通过包装到动态创建每个子类型的装饰迭代器中,提供从数字索引到命名属性的转置。这也可以帮助您将yes
和no
转换为true
和false
。但如果这只是一次性输出,我会说它还不值得。
中间件是将初始化代码移动到循环的顶部:
foreach ($units as $unit) {
$unit[4] = $unit[4] === 'yes';
$unit= array_map('intval', $unit); # escape all values to prevent injection
?>
...
<td>
<select name='avail[]' class='input-small'>
<option value='yes' <?= $unit[4] ? 'selected="selected' : '';?>>Yes</option>
<option value='no' <?= !$unit[4] ? 'selected="selected' : '';?>>No</option>
</select>
</td>
...
<? } ?>