循环但不同的表行

时间:2017-11-08 06:07:22

标签: php html arrays loops

我很难用不同的行迭代数组。

我在PHP中有这种类型的数组。

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [detail-1] => 1
                    [detail-2] => 2
                )

            [1] => Array
                (
                    [detail-3] => 3
                    [detail-4] => 4
                )

        )

    [2] => Array
        (
            .....
        )
)

Ant我希望输出为HTML,如下所示:

<tr>
    <td>1</td>
</tr>
<tr>
    <td>detail-1</td>
    <td>detail-2</td>
</tr>
<tr>
    <td>detail-3</td>
    <td>detail-4</td>
</tr>
<tr>
    <td>2</td>
</tr>
...........

那么,如何从逻辑上解决这个问题?

提前致谢。

6 个答案:

答案 0 :(得分:0)

你有多个子数组,所以遍历每个数组

尝试以下代码:

$arr = Array
(
    1 => Array
        (
            0 => Array
                (
                    "detail-1" => 1,
                    "detail-2" => 2
                ),

            1 => Array
                (
                    "detail-3" => 3,
                    "detail-4" => 4
                ),

        ),

    2 => Array
        (
            0 => Array
                (
                    "detail-5" => 5,
                    "detail-6" => 6
                ),

            1 => Array
                (
                    "detail-7" => 7,
                    "detail-8" => 8
                ),
        )
);
echo "<table border=1>";
foreach ($arr as $key => $value) {
  echo "<tr><td>$key</td></tr>";
  if(is_array($value))
  {
      for($i = 0; $i<count($value);$i++)
      {
        if(is_array($value[$i]))
        {
          echo "<tr>";
          foreach ($value[$i] as $key1 => $value1) {
            echo "<td>$key1</td>";
          }
          echo "</tr>";
        }
      }
  }
}
echo "</table>";

输出将是:

<table border="1">
  <tbody>
    <tr>
      <td>1</td>
    </tr>
    <tr>
      <td>detail-1</td>
      <td>detail-2</td>
    </tr>
    <tr>
      <td>detail-3</td>
      <td>detail-4</td></tr>
    <tr>
      <td>2</td>
    </tr>
    <tr>
      <td>detail-5</td>
      <td>detail-6</td>
    </tr>
    <tr>
      <td>detail-7</td>
      <td>detail-8</td>
    </tr>
  </tbody>
</table>

答案 1 :(得分:0)

尝试如下:

foreach($array as $key => $item) {

    echo '<tr><td colspan="2">' . $key. '</td></tr>';
    foreach($item as $val) {
            echo "<tr>";
            foreach($val as $k => $isu) echo "<td>" . $k  . "</td>";
            echo "</tr>";
    }


}

答案 2 :(得分:0)

$array=array
(
    1 => array
        (
            0 => array
                (
                    'detail-1' => 1,
                    'detail-2' => 2
                ),

            1 => array
                (
                    'detail-3' => 3,
                    'detail-4' => 4
                )

        ),
    2 =>array
        (
            0 => array
                (
                    'detail-1' => 1,
                    'detail-2' => 2
                ),

            1 => array
                (
                    'detail-3' => 3,
                    'detail-4' => 4
                )

        )
);
$html="";
foreach($array as $k=>$v){
    $html .="<tr><td>".$k."</td></tr>";
    foreach($v as $i){
        $html.="<tr>";
        foreach($i as $key=>$value)$html.="<td>".$key."</td>";
        $html.="</tr>";
    }

}
echo $html;

答案 3 :(得分:0)

你可以试试这个。这更清洁,更容易理解。

<强> CODE:

$table =array(
            '1' => array(
                '0' => array(
                    "detail-1" => 1,
                    "detail-2" => 2,
                ),
                '1' => array(
                    "detail-3" => 3,
                    "detail-4" => 4,
                )
            ),
            '2' => array(
                '0' => array(
                    "detail2-1" => 1,
                    "detail2-2" => 2,
                ),
                '1' => array(
                    "detail2-3" => 3,
                    "detail2-4" => 4,
                )
            )
        );

$output = '';
foreach($table as $first_tr_key => $first_tr){

    $output .= '<tr><td>' . $first_tr_key . '</td></tr>';

    foreach($first_tr as $second_tr_key => $second_tr){

        $output .= '<tr>';

        foreach($second_tr as $key => $val){
            $output .= '<td>' . $key . '</td>';
        }

        $output .= '</tr>';
    }
};

echo $output;

<强>输出:

<tr>
    <td>1</td>
</tr>
<tr>
    <td>detail-1</td>
    <td>detail-2</td>
    </tr>
<tr>
  <td>detail-3</td>
  <td>detail-4</td>
</tr>
<tr>
  <td>2</td>
</tr>
<tr>
  <td>detail2-1</td>
  <td>detail2-2</td>
</tr>
<tr>
  <td>detail2-3</td>
  <td>detail2-4</td>
</tr>

答案 4 :(得分:0)

您可以使用嵌套的foreach循环遍历数组以获得所需的输出

这是一些技巧。

你的阵列..

$arr = Array(
 1 => Array(0 => Array('detail1' => 101, 'detail2' => 201), 1 => Array( 'detail3' => 301, 'detail4' => 401)),
2 => Array(0 => Array('detail1' => 102, 'detail2' => 202), 1 => Array( 'detail3' => 302, 'detail4' => 402))
);

这里是示例代码:

    echo '<table><thead><tr><th></th><th></th></td></thead><tbody>';

    foreach($arr as $key => $outerArr){
        echo '<tr><td>'.$key.'</td></tr>';
        foreach($outerArr as $inKey => $inArr){
            echo '<tr>';
            foreach($inArr as $innerArr)
                echo '<td>'.$innerArr.'</td>';

            echo '</tr>';
        }   
    }
    echo '</tbody></table>';

和输出。

<table>
   <thead>
      <tr>
         <th></th>
         <th></th>
         </td>
   </thead>
   <tbody>
      <tr>
         <td>1</td>
      </tr>
      <tr>
         <td>101</td>
         <td>201</td>
      </tr>
      <tr>
         <td>301</td>
         <td>401</td>
      </tr>
      <tr>
         <td>2</td>
      </tr>
      <tr>
         <td>102</td>
         <td>202</td>
      </tr>
      <tr>
         <td>302</td>
         <td>402</td>
      </tr>
   </tbody>
</table>

答案 5 :(得分:0)

这是我的目标,2个foreach循环,

<?php
$table =array(
    '1' => array(
        '0' => array(
            "detail-1" => 1,
            "detail-2" => 2,
        ),
        '1' => array(
            "detail-3" => 3,
            "detail-4" => 4,
        )
    ),
    '2' => array(
        '0' => array(
            "detail2-1" => 1,
            "detail2-2" => 2,
        ),
        '1' => array(
            "detail2-3" => 3,
            "detail2-4" => 4,
        )
    )
);


foreach($table as $key => $array){
    echo "<tr>
\t<td colspan=\"2\" >{$key}</td>
</tr>
";
    foreach($array as $k => $row){
        $one = key($row);
        next($row);
        $two = key($row);
       echo "<tr>
\t<td>{$one}</td>
\t<td>{$two}</td>
</tr>
";
    }
}

输出

<tr>
    <td colspan="2" >1</td>
</tr>
<tr>
    <td>detail-1</td>
    <td>detail-2</td>
</tr>
<tr>
    <td>detail-3</td>
    <td>detail-4</td>
</tr>
<tr>
    <td colspan="2" >2</td>
</tr>
<tr>
    <td>detail2-1</td>
    <td>detail2-2</td>
</tr>
<tr>
    <td>detail2-3</td>
    <td>detail2-4</td>
</tr>

您可以使用key()next()跳过一个循环您可以在此处尝试

http://sandbox.onlinephpfunctions.com/code/7231900a23f7f6afd8a57b979a27009a0fc7034b

哦,不要忘记单colspan="2"

行上的<td>