2016-09-09 5 views
-1

10行以上が見つかったらテーブルを10行に制限しようとしていますが、新しいテーブルを作成します。データはJSONから読み込まれます。行とキーと値に応じてテーブルを分割する方法を教えてください。 PHPとJSON

<?php 

$json = '{"test1": { 
     "sub1": [ 
      "1", "2", "3" 
     ], 
     "sub2": [ 
      "1", "2", "3","4" 
     ], 
     "sub3": [ 
      "1", "2", "3","4" 
     ], 
     "sub4": [ 
      "1", "2" 
     ] 
    } 
    }'; 

$results = json_decode($json); 

echo '<table>'; 
foreach ($results->test1 as $key => $jsons) { 

    foreach ($jsons as $value) { 
     echo '<tr>'; 
     echo '<td>'.ucwords($key).'</td>'; 
     echo '<td>' . $value . '</td>'; 
     echo '</tr>'; 

    } 
} 
echo '</table>'; 
?> 

必要な出力のようなものになります:コードはこのようなものが見えます

<table> 
    <tr> 
     <td>Sub1</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td>Sub2</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>4</td> 
    </tr> 
    <tr> 
     <td>Sub3</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>3</td> 
    </tr> 
</table> 
<table> 
    <tr> 
     <td>Sub3</td> 
     <td>4</td> 
    </tr> 
    <tr> 
     <td>Sub4</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td>2</td> 
    </tr> 
</table> 

を私はforeachループを使用していた私は、JSONファイルのサイズをカウントするforループを使用する必要がありますし、 10に制限してから続行しますか?

さらに良い方法がありますか?

+0

foreach内で増分変数を使用すると、カウントが達成されたらループを解除します。 – Thamilan

+0

@Thamilanの例が素晴らしいでしょう! – Akshay

答えて

1

1つの方法は、フラグにブール型ヘッダーを使用することです。次にそれをモジュロ% 10 == 0を使用してカットします。以下は、それを使って新しいバッチを作成することです。

$results = json_decode($json); 
$new_array = array(); 
$i = 0; 
foreach($results->test1 as $k => $value) { 
    $header = true; 
    foreach($value as $k2 => $v) { 
     if($i % 10 == 0 || $header) { 
      $key_pair = array($k, $v); 
     } else { 
      $key_pair = array(null, $v); 
     } 
     $i++; 
     $new_array[] = $key_pair; 
     $header = false; 
    } 
} 

foreach(array_chunk($new_array, 10) as $value) { 
echo '<table>'; 
    foreach($value as $tr) { 
     echo '<tr><td>', implode('</td><td>', $tr), '</td></tr>'; 
    } 
echo '</table>'; 
+0

したがって、 '

'タグは最初のループに入りますか? – Akshay

+0

@akshayちょうどあなたが持っているもののように、ループの直前 – Ghost

+0

ああ。しかし、それは新しいテーブルの権利を作成しませんか?ただ一つの大きなテーブル。希望の出力を見てください。 – Akshay

関連する問題