2016-07-27 42 views
0

我很努力從php數組創建一個html表,同時根據數組在不同的行上應用不同的css類。如何在從php數組創建的html表中爲不同的行設置不同的樣式?

我在data.php此代碼:

<?php 
$data = array(
    array('Title 1'=>'text11', 'Title 2'=>'text12'), 
    array('Title 1'=>'text21', 'Title 2'=>'text22'), 
    array('Title 1'=>'text31', 'Title 2'=>'text32'), 
    array('Title 1'=>'text41', 'Title 2'=>'text42', 'special'=>'style1'), 
    array('Title 1'=>'text51', 'Title 2'=>'text52', 'special'=>'style2'), 
); 
?> 

我想創建此數組HTML表格,如果數組包含「特殊」 =>「風格」,這將設置那種風​​格到那個特定的行。這是到目前爲止我的代碼:

<?php include('data.php'); ?> 
<table> 
    <thead> 
    <tr> 
     <th>Title 1</th> 
     <th>Title 2</th> 
    </tr> 
    </thead> 
    <tbody> 
<?php foreach ($data as $key=>$row): 
     if ($row == 'class1') { 
      $class='class="style1"'; 
      } elseif ($row == 'class1') { 
      $class='class="style2"'; 
      } else { 
      $class=''; 
      }?> 
    <tr <?php echo $class ?>> 
     <td><?php echo implode('</td><td>', $row); ?></td> 
    </tr> 
<?php endforeach; ?> 
    </tbody> 
</table> 

這是所需的輸出:

<table> 
    <thead> 
    <tr> 
     <th>Title 1</th> 
     <th>Title 2</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>text11</td><td>text12</td> 
    </tr> 
    <tr> 
     <td>text21</td><td>text22</td> 
    </tr> 
    <tr> 
     <td>text31</td><td>text32</td> 
    </tr> 
    <tr class="style1"> 
     <td>text41</td><td>text42</td> 
    </tr> 
    <tr class="style2"> 
     <td>text51</td><td>text52</td> 
    </tr> 
    </tbody> 
</table> 
+0

一開始$行是一個數組爲$數據是多維的,沒有什麼與「的Class1」陣列內.. – 2016-07-27 22:15:27

+1

'如果($行[「特殊」] ==「的Class1」){ '儘管'special'的內容似乎與你的代碼示例相反,這似乎表明這將適用於你現有的數組:'if($ row ['special'] =='style1'){$ class =' class1';' –

回答

0

您的問題是這一行:

<?php foreach ($data as $key=>$row): 

你忘記了你正在遍歷一個多維數組(即一個數組數組) t $row是這裏的一個數組。在下一行:

if ($row == 'class1') 

你正在尋找一個字符串,$row這是一個陣列之間的比較。這將永遠不會工作!正如Daniel在他的回答中指出的那樣,您需要查看數組的內容。

不要忘記,在顯示數組之前,您需要從數組中刪除special元素。就個人而言,我會簡化代碼,儘管像這樣混合PHP和HTML從來都不是一個好主意。

<?php include('data.php'); ?> 
<table> 
    <thead> 
    <tr> 
     <th>Title 1</th> 
     <th>Title 2</th> 
    </tr> 
    </thead> 
    <tbody> 
<?php foreach ($data as $row): $class = $row["special"] ?? ""; unset($row["special"]);?> 
    <tr class="<?=$class?>"> 
     <td><?=implode("</td><td>", $row)?></td> 
    </tr> 
<?php endforeach; ?> 
    </tbody> 
</table> 
+0

非常感謝您的解釋,是的,我完全忘記了$行也是一個數組。是的,像這樣混合php和html並不完美,但我不喜歡冗餘class =「」在每一行中。 – morrelo

0

如果我正確理解你的問題,這應該做的工作。

結果是你的願望,看到:Online PHP shell

<table> 
     <thead> 
     <tr> 
      <th>Title 1</th> 
      <th>Title 2</th> 
     </tr> 
     </thead> 
     <tbody> 
    <?php foreach ($data as $key=>$row): 
      if (isset($row["special"])) { 
       $class = " class='" . $row["special"]. "'";  
       unset($row["special"]); 
       } else { 
       $class=''; 
       }?> 
     <tr<?php echo $class ?>> 
      <td><?php echo implode('</td><td>', $row); ?></td> 
     </tr> 
    <?php endforeach; ?> 
     </tbody> 
    </table> 
+0

一個有用的答案應該解釋什麼是問題,而不是隻是拋出一些代碼。理想情況下,問這個問題的人會學到更多東西而不是「所以我會爲我修復我的代碼!」 – miken32

+0

謝謝你的回答,這是一個很好很容易的解決方案,儘管@ miken32的答案更具說明性。 – morrelo

0

我不知道我什麼都明白了,但你可以試試這個

<?php foreach ($data as $key => $row): 
    $class = ''; 
    if(isset($row['special'])){ 
     $class = 'class="'.$row['special'].'"'; 
     unset($row['special']); 
    } 
?> 
<tr <?php echo $class ?>> 
    <td><?php echo implode('</td><td>', $row); ?></td> 
</tr> 
<?php endforeach; ?> 
+0

有用的答案應該解釋問題所在,而不是僅僅拋出一些代碼。理想情況下,問這個問題的人會學到更多東西而不是「所以我會爲我修復我的代碼!」 – miken32

+0

是的,但有時候某個動作比較長,說話更好 – skank

+0

謝謝你的回答,這是一個很好很容易的解決方案,儘管@ miken32的回答更具說明性。 – morrelo

相關問題