【问题标题】:Loop but different table row循环但不同的表行
【发布时间】:2017-11-08 06:07:22
【问题描述】:

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

我在 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>
...........

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

提前致谢。

【问题讨论】:

  • 那么,发生了什么,没有发生什么,期望的行为是什么?
  • 你的 php 循环在哪里?
  • @madalinivascu 未发布,因为我不知道如何循环播放?
  • @JaydeepMor 使用 foreach 循环
  • 好的@madalinivascu 但是怎么做?你能看到想要的输出吗?

标签: php html arrays loops


【解决方案1】:

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

试试下面的代码:

$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>

【讨论】:

  • 我没有投反对票,但是除了不满足输出的要求之外,您还有一个封闭的{ 我一眼就可以看到.. 也许您只粘贴了部分代码?
  • 我的输出是一样的,只是我在tr之外添加了table作为它的结构。 @ArtisticPhoenix 是什么问题?
  • @ArtisticPhoenix 看到我已将整个代码滚动添加到代码面板。你可以看到整个代码。
  • 好吧,没关系我的网站被窃听了。正如我所说,虽然我没有投反对票,但它只是想提供帮助。我不得不重新加载页面然后滚动出现。
【解决方案2】:
$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】:

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

    代码:

    $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】:

      您可以使用嵌套的 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】:

        这是我的尝试,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" 与单个&lt;td&gt; 在行上

        【讨论】:

          【解决方案6】:

          尝试如下:

          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>";
              }
          
          
          }
          

          【讨论】:

          • $val 是一个数组,该数组的键包含 detail-1
          • 当然,仅供参考,我没有投反对票。那不是我的风格。
          • @ArtisticPhoenix 没关系,我是有点无脑了。
          猜你喜欢
          • 2021-07-13
          • 2018-09-19
          • 2018-02-28
          • 1970-01-01
          • 2018-03-19
          • 2018-02-02
          • 1970-01-01
          • 2021-01-18
          • 2014-09-05
          相关资源
          最近更新 更多