dongshi949737 2017-11-20 18:42
浏览 70
已采纳

PHP:将数组输出到表中

For my PHP Project, I need to print a sorted array into a table. We can not use premade sorting functions to do this, and were instructed to make our own sorting function. The sorting works, but it will not go into a html table format the way we need it.

    <?php
    $fileInput = "guestBook.txt";
    $fileInputInData = file_get_contents($fileInput);
    $array=explode("
", $fileInputInData);

    for($j = 0; $j < count($array); $j ++) 
    {
      for($i = 0; $i < count($array)-1; $i ++)
      {

        if($array[$i] > $array[$i+1])
        {
        $temp = $array[$i+1];
        $array[$i+1]=$array[$i];
        $array[$i]=$temp;

        }       
      }
     }
     echo "<th>Firstname</th><th>Lastname</th><th>Email Address</th>";
     $arrayExplode = explode("
", $array);
     $k = 0;
     foreach($array as $arrayOut)
     {
     $arrayExplodeTwo = explode(" ", $arrayExplode[$k]);
     $firstName =  $arrayExplodeTwo[0];
     $lastName = $arrayExplodeTwo[1];
     $email = $arrayExplodeTwo[2];
     echo '<tr><td>'; echo $firstName; echo '</td></tr>';echo '<tr><td>'; 
     echo $lastName; echo '</td></tr>';
     echo '<tr><td>'; echo $email; echo '</td></tr>';
     $k++;  
     }


     ?>

The code outputs like so:

           Firstname Lastname Email

The code doesn't want to print data into the table properly. Taking out the specific breakup of the explode in the foreach loop outputs it into a table. However, doing so does not break them up into the spaces of the table, just a single box per row, leaving the other 2 boxes empty. It prints the data into the table all in the Firstname column, with the data per row. Putting the data to format it into specific lines results in it printing nothing into the columns, just an empty table.

Here is how my code is outputting to the web browser, before adding the explode function into the foreach loop near the bottom of the code.

       Firstname                            Lastname    Email Address
       Anon emous anon@email.com
       Matthew rando rando@gmail.com has signed in.
       Matthew rando rando@gmail.com has signed in.
       Matthew rando rando@gmail.com has signed in.
       Person Anon Anon@emailaddr.com has signed in.
       Person AnonyMouse AnonyMouse@emailaddr.com has signed in.
       Person Name randomaddr@example.com has signed in.
       Test Person thispersonisatest@fake.com has signed in.
       Test PersonTwo thispersonisatestTwo@fake.com has signed in.
       random name randomname@example.com
       test personand testPersonAnd@testemail.com has signed in.

After adding the explode function in the foreach loop, results in it printing like so:

       Firstname    Lastname    Email Address

with no data in the table period, outputted as a blank table.

Thank you in advance for any help.

  • 写回答

2条回答 默认 最新

  • dongpai6552 2017-11-20 19:38
    关注

    I made some assumptions about your guestBook.txt file and got the following bit of code working.


    <?php
    
    # Read and parse the file
    $fileInput = "guestBook.txt";
    $fileInputInData = file_get_contents($fileInput);
    $array=explode("
    ", $fileInputInData);
    
    # Sort the data
    for($j = 0; $j < count($array); $j ++)
    {
       for($i = 0; $i < count($array)-1; $i ++)
       {
          if($array[$i] > $array[$i+1])
          {
             $temp = $array[$i+1];
             $array[$i+1]=$array[$i];
             $array[$i]=$temp;
          }
       }
    }
    
    # Check the sort results
    #var_dump($array);
    
    # Echo the table header
    echo "<tr><th>Firstname</th><th>Lastname</th><th>Email Address</th></tr>";
    
    # Loop through each element of the sorted array
    foreach($array as $arrayOut)
    {
       # Explode the current array element by spaces
       $arrayExplode = explode(" ", $arrayOut);
    
       # Assign the data
       $firstName =  $arrayExplode[0];
       $lastName = $arrayExplode[1];
       $email = $arrayExplode[2];
    
       # Echo out the results
       echo '<tr>';
       echo ' <td>'; echo $firstName; echo '</td>';
       echo ' <td>'; echo $lastName; echo '</td>';
       echo ' <td>'; echo $email; echo '</td>';
       echo '</tr>';
    }  
    ?>
    

    Some comments regarding your original code:

    1. In your code: $array=explode(" ", $fileInputInData); and $arrayExplode = explode(" ", $array);

    were doing the same thing twice and throwing an error.

    1. As @PatrickSJ mentioned, your HTML output was writing firstName, lastName, and email on 3 separate rows instead of on one row.

      <tr><td>$firstName</td></tr>
      <tr><td>$lastName</td></tr>
      <tr><td>$email</td></tr>
      

    vs

        <tr>
         <td>$firstName</td>
         <td>$lastName</td>
         <td>$email</td>
        <tr>
    

    Hope this help!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误