1

問題:

PHPを使用して配列内の値を使用してカスタムHTMLフォームを生成しようとしています。

PHPコード$ row ['Key']にはW、B、およびRが含まれます):

$numbers[$row['Key']] = array (
                            'C' => 
                                array (
                                    'BO' => $row['BO'], 
                                    'BT' => $row['BT']),
                            'D' => 
                                array (
                                    'MF' => $row['MF'], 
                                    'MT' => $row['MT'])
                        );

PHPで生成された配列:

Array
(
    [W] => Array
        (
            [C] => Array
                (
                    [BO] => 36
                    [BT] => 63
                )
            [D] => Array
                (
                    [MF] => 54
                    [MT] => 63
                )
        )

    [B] => Array
        (
            [C] => Array
                (
                    [BO] => 60
                    [BT] => 105
                )
            [D] => Array
                (
                    [MF] => 90
                    [MT] => 105
                )
        )

    [R] => Array
        (
            [C] => Array
                (
                    [BO] => 12
                    [BT] => 21
                )
            [D] => Array
                (
                    [MF] => 18
                    [MT] => 24
                )
        )
)

結果は次のようになります。W / B/RとBO/BT / MF/MTの組み合わせに注意してください。

<table>
    <tbody>
        <tr>
            <td>W</td>
            <td><input type="text" name="WBO" id="WBO" value="36"></td>
            <td><input type="text" name="WBT" id="WBT" value="63"></td>
            <td><input type="text" name="WMF" id="WMF" value="54"></td>
            <td><input type="text" name="WMT" id="WMT" value="63"></td>
        </tr>
        <tr>
            <td>B</td>
            <td><input type="text" name="BBO" id="BBO" value="60"></td>
            <td><input type="text" name="BBT" id="BBT" value="105"></td>
            <td><input type="text" name="BMF" id="BMF" value="90"></td>
            <td><input type="text" name="BMT" id="BMT" value="105"></td>
        </tr>
        <tr>
            <td>R</td>
            <td><input type="text" name="RBO" id="RBO" value="12"></td>
            <td><input type="text" name="RBT" id="RBT" value="21"></td>
            <td><input type="text" name="RMF" id="RMF" value="18"></td>
            <td><input type="text" name="RMT" id="RMT" value="24"></td>
        </tr>
    </tbody>
</table>
4

5 に答える 5

5

http://php.net/manual/en/control-structures.foreach.php

于 2012-06-01T11:03:07.363 に答える
2

3つのforeachループを使用せずに

$var = print_r($numbers, true);

$table =  preg_replace_callback(
            "{.*?[^ ][ ]{4}\[(\S+)\].*?[^ ][ ]{8}\)}s",
            "func",
            $var);
$table= preg_replace('{\n[^<].*}','',$table);   

echo "<table>{$table}</table>";   

関数:(配列レベルを見つけるためにスペースを数える)

function func($matches)
{
  $table='';
  $k=$matches[1];
  $t=$matches[0];

  $tr = preg_replace('{.*?[^ ][ ]{20}\[(\S+)\].*?=>.*?(\S+)}s',PHP_EOL."<td><input type='text' id='{$k}$1' name='{$k}$1' value='$2'></td>",$t);

  $table .= "<tr>".PHP_EOL;
  $table .= "<td>{$k}<td>{$tr}".PHP_EOL;
  $table .= "</tr>".PHP_EOL;
   return  $table;
}

エコー

<table><tr>
<td>W<td>
<td><input type='text' id='WBO' name='WBO' value='36'></td>
<td><input type='text' id='WBT' name='WBT' value='63'></td>
<td><input type='text' id='WMF' name='WMF' value='54'></td>
<td><input type='text' id='WMT' name='WMT' value='63'></td>
</tr>
<tr>
<td>B<td>
<td><input type='text' id='BBO' name='BBO' value='60'></td>
<td><input type='text' id='BBT' name='BBT' value='105'></td>
<td><input type='text' id='BMF' name='BMF' value='90'></td>
<td><input type='text' id='BMT' name='BMT' value='105'></td>
</tr>
</table>
于 2013-04-08T07:14:31.100 に答える
1

これ?

echo "<table><tbody>";
foreach((array)$numbers as $key=>$val) {
   echo "<tr><td>".$key."</td>";
   foreach((array)$val as $key2=>$val2) {
      foreach((array)$val2 as $key3=>$val3) {
         echo '<td><input type="text" name="'.$key.$key3.'" id="'.$key.$key3.'" value="'.$val3.'"></td>';
      }
   }
   echo "</tr>";
}
echo "</tbody></table>";
于 2012-06-01T11:20:48.053 に答える
1

を使用して、この配列をステップスルーするのはかなり簡単foreach()です。

[ghoti@pc ~]$ cat doit.php 
#!/usr/local/bin/php
<?php
printf("<table>\n  <tbody>\n");

$numbers=array(
  'W' => array(
    'C' => array( 'BO' => 36, 'BT' => 63),
    'D' => array( 'MF' => 54, 'MT' => 63),
  ),
  'B' => array(
    'C' => array( 'BO' => 60, 'BT' => 105),
    'D' => array( 'MF' => 90, 'MT' => 105),
  ),
);

$fmt1 = "\t<tr>\n"
     . "\t\t<td>%s</td>\n"
     . "%s"
     . "\t</tr>\n";

$fmt2 = "\t\t<td><input type='text' name='%s%s' id='%s%s' value='%s'></td>\n";

foreach ($numbers as $index1 => $line1) {
  foreach ($line1 as $index2 => $line2) {
    foreach ($line2 as $index3 => $value) {
      $output .= sprintf($fmt2, $index1, $index3, $index1, $index3, $value);
    }
  }
  printf($fmt1, $index1, $output);
  $output = "";
}

printf("  </tbody>\n</table>\n");

そして出力:

[ghoti@pc ~]$ ./doit.php
<table>
  <tbody>
        <tr>
                <td>W</td>
                <td><input type='text' name='WBO' id='WBO' value='36'></td>
                <td><input type='text' name='WBT' id='WBT' value='63'></td>
                <td><input type='text' name='WMF' id='WMF' value='54'></td>
                <td><input type='text' name='WMT' id='WMT' value='63'></td>
        </tr>
        <tr>
                <td>B</td>
                <td><input type='text' name='BBO' id='BBO' value='60'></td>
                <td><input type='text' name='BBT' id='BBT' value='105'></td>
                <td><input type='text' name='BMF' id='BMF' value='90'></td>
                <td><input type='text' name='BMT' id='BMT' value='105'></td>
        </tr>
  </tbody>
</table>
[ghoti@pc ~]$ 
于 2012-06-01T11:25:44.003 に答える
1

このコードの男を確認してください。

<table>
    <tbody>
        <?php
            foreach($numbers as $key=>$sarray){
                echo "<tr>";
                    echo "<td>$key</td>";
                    foreach($sarray as $key1=>$sarray1){
                        foreach($sarray1 as $fname=>$fvalue){
                            echo '<td><input type="text" name="'.$fname.'" id="'.$fname.'" value="'.$fvalue.'"></td>';
                        }
                    }
                echo "</tr>";
            }
        ?>
    </tbody>
</table>
于 2012-06-01T12:10:38.797 に答える