1

这是我的数组

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

2 回答 2

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; ?>
于 2013-08-25T07:40:13.160 回答
0

你双重冒泡这个循环重复。

就拿foreach,去掉for里面。删除$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. 您可以对其进行硬编码(卧室 = 0,浴室 = 1,...)。

您还可以通过包装到装饰迭代器中动态地创建每个子类型来提供从数字索引到命名属性的转置。这也可以帮助您转身yesno例如。但如果这只是一次性输出,我会说它还不值得。truefalse

一个中间步骤是将初始化代码移动到循环的顶部:

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>

...

<? } ?>
于 2013-08-25T07:40:55.413 回答