2016-07-27 6 views
0

私はphp配列からhtmlテーブルを作成するのに苦労していますが、配列に応じて異なる行に異なるCSSクラスを適用しています。私はこの配列からHTMLテーブルを作成したい、とのアレイは「特別な」=>「スタイル」が含まれている場合、それは設定しますPHPの配列から作成されたhtmlテーブルの異なる行に異なるスタイルを設定するにはどうすればいいですか?

<?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'), 
); 
?> 

は私がdata.phpにこのコードを持っていますその特定の行のスタイル。これは、これまでの私のコードです:

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

$データとして配列は多次元である、「クラス1」を持つ配列内の何もない.. –

+1

'IF($行[「特別」] ==「クラス1」){ '' special 'の内容はあなたのコード例から逆になっているように見えますが、これはあなたの既存の配列ではうまくいくと思われます: 'if($ row [' special '] ==' style1 '){$ class =' ' class1 ';' –

答えて

0

あなたの問題は、このラインで試すことができます。

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

あなたは多次元配列(配列の配列)をループしていることを忘れていますt $rowはここの配列です。次の行に:

if ($row == 'class1') 

あなたは配列で、文字列と$row間の比較を探しています。これは決してうまくいかないでしょう!ダニエルが答えて指摘するように、配列の内容を調べる必要があります。

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を混ぜるのは完璧ではありませんが、すべての行で冗長クラス= ""が好きではありません。 – 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

関連する問題