2016-06-22 7 views
1

からの私のような配列があります:それはあるとしても、他の製品のIDが来るかもしれメイク製品の比較表の配列

Product ID  | 19   | 20 
    Hard Disk  | 500 GB  | 1 TB 
    RAM    | 16 GB  | 8 GB 
    Graphics  | 2 GB   | 1 GB 
    Graphics Card | 2 GB   | 1 GB 

Array 
(
[0] => Array 
    (
     [product_id] => 19 
     [attributes] => Array 
      (
       [0] => Array 
        (
         [label] => Hard Disk 
         [name] => harddisk 
         [value] => 500 GB 
        ) 

       [1] => Array 
        (
         [label] => RAM 
         [name] => ram 
         [value] => 16 GB 
        ) 

       [2] => Array 
        (
         [label] => Graphics 
         [name] => graphics 
         [value] => 2 GB 
        ) 

       [3] => Array 
        (
         [label] => Graphics Card 
         [name] => graphicscard 
         [value] => 2 GB 
        ) 

      ) 

    ) 

[1] => Array 
    (
     [product_id] => 20 
     [attributes] => Array 
      (
       [0] => Array 
        (
         [label] => Hard Disk 
         [name] => harddisk 
         [value] => 1 TB 
        ) 

       [1] => Array 
        (
         [label] => RAM 
         [name] => ram 
         [value] => 8 GB 
        ) 

       [2] => Array 
        (
         [label] => Graphics 
         [name] => graphics 
         [value] => 1 GB 
        ) 

       [3] => Array 
        (
         [label] => Graphics Card 
         [name] => graphicscard 
         [value] => 1 GB 
        ) 

      ) 

    ) 

) 

私は表形式にこの配列を抽出したいのよう動的。私は最初の列を取得することができますが、他の列を取得する方法。私のコードは:

<table class="table"> 

       <?php 
       $count = count($all); 
       if (!empty($all)) { 
        foreach ($all as $value) { 
         ?> 
    <?php foreach ($value['attributes'] as $val) { ?> 
          <tr> 
           <td><?php echo $val['label']; ?></td> 
          </tr> 
         <?php 
         } exit(); 
        } 
       } 
       ?> 
     </table> 

答えて

0

私はいつも完全にHTMLとPHPの混乱に戸惑います。私はより鮮明な外観を好む。

私は2つのステップであなたの問題を解決するだろう:

1:簡単に表として表示することができ、アレイに使用するアレイの電源を入れます。

2:その配列からテーブルをレンダリングします。

if (is_array($all)) { 

    // step 1: create table 
    foreach ($all as $one) { 
    $id = $one['product_id']; 
    $table['Product Id'][$id] = $id; 
    foreach ($one['attributes'] as $attribute) { 
     $label = $attribute['label']; 
     $value = $attribute['value']; 
     $table[$label][$id] = $value; 
    } 
    } 

    // step 2: render the table 
    echo '<table class="table">'.PHP_EOL; 
    foreach ($table as $label => $row) { 
    echo "<tr><td>$label</td>"; 
    foreach ($table['Product Id'] as $id) { 
     echo '<td>'.(isset($row[$id]) ? $row[$id] : '-').'</td>'; 
    } 
    echo '</tr>'.PHP_EOL; 
    } 
    echo '</table>'.PHP_EOL; 

} 

このルーチンは、欠落している属性に対処できます。

このコードは完璧ではありませんが、始めるべきポイントがあります。課題は複雑さをさらに減らすことです。私はそれが可能だと思います。

+0

こんにちは、私はそれにバグを発見した。製品IDに基づいてデータベースから行を取得するために、製品IDにアクセスできません。 – user254153

+0

コードはあなたのサンプル配列でテストされ、うまくいきました。私は製品ID '$ id'を呼び出しました。とにかく、ここのコードはあなたに新しいアイデアを与えることだけを目的としています。あなたがあなたの質問に指定しなかったニーズを持っているならば、この問題を解決するために全く異なる方法を使うことができます。 –

+0

製品IDを使用してデータベースから製品の詳細を取得しようとしています。はい、製品IDにアクセスできますが、ループ中であるため、データベースクエリは実行される回数よりも多くの回数ループしています。ご質問に2つの製品IDしかないので、データベースのリクエストに2回ご協力ください。お手伝いありがとう。 – user254153