显示来自多维数组的表数据

时间:2013-08-25 07:25:46

标签: php arrays

这是我的数组

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

2 个答案:

答案 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,......)。

您还可以通过包装到动态创建每个子类型的装饰迭代器中,提供从数字索引到命名属性的转置。这也可以帮助您将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>

...

<? } ?>