2016-12-20 12 views
2

unsetのstdClassオブジェクト内にしようとしていますforeachループです。ここに私のコードは次のとおりです。 PHPは、ループの配列オブジェクトをアンセット

<?php 
    if (isset($summaryResult)) { 
     foreach($summaryResult as $rows) { ?> 
      <tr> 
       <td><?php echo $rows->st_date;?></td> 
       <td> 
        <?php 
         if(($rows->st_time_09 == '')&&($rows->st_time_11 == '')&&($rows->st_time_13 == '')){echo $rows->st_time_07;} 
         elseif(($rows->st_time_07 == '')&&($rows->st_time_11 == '')&&($rows->st_time_13 == '')){echo $rows->st_time_09;} 
         elseif(($rows->st_time_07 == '')&&($rows->st_time_09 == '')&&($rows->st_time_13 == '')){echo $rows->st_time_11;} 
         elseif(($rows->st_time_07 == '')&&($rows->st_time_09 == '')&&($rows->st_time_11 == '')){echo $rows->st_time_13;} 
         else{} 
        ?>     
       </td> 
       <td> 
        <?php 
         if(($rows->st_chlorine_09 == '')&&($rows->st_chlorine_11 == '')&&($rows->st_chlorine_13 == '')){echo $rows->st_chlorine_07;} 
         elseif(($rows->st_chlorine_07 == '')&&($rows->st_chlorine_11 == '')&&($rows->st_chlorine_13 == '')){echo $rows->st_chlorine_09;} 
         elseif(($rows->st_chlorine_07 == '')&&($rows->st_chlorine_09 == '')&&($rows->st_chlorine_13 == '')){echo $rows->st_chlorine_11;} 
         elseif(($rows->st_chlorine_07 == '')&&($rows->st_chlorine_09 == '')&&($rows->st_chlorine_11 == '')){echo $rows->st_chlorine_13;} 
         else{} 
        ?> 
       </td> 
       <td> 
        <?php 
         if(($rows->st_time_15 == '')&&($rows->st_time_17 == '')&&($rows->st_time_19 == '')){echo $rows->st_time_21;} 
         elseif(($rows->st_time_21 == '')&&($rows->st_time_17 == '')&&($rows->st_time_19 == '')){echo $rows->st_time_15;} 
         elseif(($rows->st_time_21 == '')&&($rows->st_time_15 == '')&&($rows->st_time_19 == '')){echo $rows->st_time_17;} 
         elseif(($rows->st_time_21 == '')&&($rows->st_time_15 == '')&&($rows->st_time_17 == '')){echo $rows->st_time_19;} 
         else{} 
        ?> 
       </td> 
       <td> 
        <?php 
         if(($rows->st_chlorine_21 == '')&&($rows->st_chlorine_17 == '')&&($rows->st_chlorine_19 == '')){echo $rows->st_chlorine_15;} 
         elseif(($rows->st_chlorine_21 == '')&&($rows->st_chlorine_15 == '')&&($rows->st_chlorine_19 == '')){echo $rows->st_chlorine_17;} 
         elseif(($rows->st_chlorine_21 == '')&&($rows->st_chlorine_15 == '')&&($rows->st_chlorine_17 == '')){echo $rows->st_chlorine_19;} 
         elseif(($rows->st_chlorine_15 == '')&&($rows->st_chlorine_17 == '')&&($rows->st_chlorine_19 == '')){echo $rows->st_chlorine_21;} 
         else{} 
        ?> 
       </td> 
       <td> 
        <?php 
         if(($rows->st_time_23 == '')&&($rows->st_time_01 == '')&&($rows->st_time_03 == '')){echo $rows->st_time_05;} 
         elseif(($rows->st_time_05 == '')&&($rows->st_time_01 == '')&&($rows->st_time_03 == '')){echo $rows->st_time_23;} 
         elseif(($rows->st_time_05 == '')&&($rows->st_time_23 == '')&&($rows->st_time_03 == '')){echo $rows->st_time_01;} 
         elseif(($rows->st_time_05 == '')&&($rows->st_time_23 == '')&&($rows->st_time_01 == '')){echo $rows->st_time_03;} 
         else{} 
        ?> 
       </td> 
       <td> 
        <?php 
         if(($rows->st_chlorine05 == '')&&($rows->st_chlorine01 == '')&&($rows->st_chlorine03 == '')){echo $rows->st_chlorine23;} 
         elseif(($rows->st_chlorine05 == '')&&($rows->st_chlorine23 == '')&&($rows->st_chlorine03 == '')){echo $rows->st_chlorine01;} 
         elseif(($rows->st_chlorine05 == '')&&($rows->st_chlorine23 == '')&&($rows->st_chlorine01 == '')){echo $rows->st_chlorine03;} 
         elseif(($rows->st_chlorine23 == '')&&($rows->st_chlorine01 == '')&&($rows->st_chlorine03 == '')){echo $rows->st_chlorine05;} 
         else{} 
        ?> 
       </td> 
      </tr> 
     <?php 
     } 


     // unset($summaryResult); <== why this unset doesn't work ? 
    } else { ?> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
    <?php 
    } ?> 

コードの上

は、次のスクリーンショットのような結果を表示します:

enter image description here

私は4行(スクリーンショットの下にチェック)unsetにより、すべてのオブジェクトへのデータの折り返しをしたいですすでに印刷されています。私は末尾の 'foreach'ループにunset($summaryResult)を入れましたが、うまくいきません。

enter image description here

すべてのヘルプはappreaciatedされるだろう。

+0

あなたはforeachの内側にはありません –

+0

foreachの内側にセットされていない場合、それは配列の1つのセットを実行した後に停止します。私が理解しているところでは、@metaphorは空白のセルを印刷しないようにしてください。 – weirdo

+0

ここで何かを "unset"できません。目的の表データを表示するためには、このファイルの構造全体を再構築する必要があります。 –

答えて

0

私が正しく理解したら、foreachループ内の配列を変更(設定解除)しますか?できるようにするためにはhttp://www.php.net/manual/en/control-structures.foreach.php

- 値

前&を追加しようとするリンクをクリックしてください詳細情報については

foreach($summaryResult as &$rows) 

foreach($summaryResult as $rows) 

から を変更してみてくださいループ内の配列要素を直接変更する方法 $ valueの前に&

+0

私は単にデータを並べ替えるだけで空白のフィールドは印刷しないと言うことができます – metaphor

0

このような配列を仮定します。

$arr = array (
     array( "time" => "30/06/2016", 
       "time1" => 11, 
       "shift1" => 1, 
       "time2" => "", 
       "shift2" => "", 
       "time3" => "", 
       "shift3" => "", 
       "time4" => 6, 
       "shift4" => 2 
      ), 
     array( "time" => "30/06/2016", 
       "time1" => "", 
       "shift1" => "", 
       "time2" => 2, 
       "shift2" => 1, 
       "time3" => 3, 
       "shift3" => 1, 
       "time4" => "", 
       "shift4" => "" 
      ), 
     array( "time" => "30/06/2016", 
       "time1" => "", 
       "shift1" => "", 
       "time2" => 12, 
       "shift2" => 1, 
       "time3" => "", 
       "shift3" => "", 
       "time4" => 5, 
       "shift4" => 3 
      ), 
     array( "time" => "30/06/2016", 
       "time1" => 12, 
       "shift1" => 0.9, 
       "time2" => "", 
       "shift2" => "", 
       "time3" => 3, 
       "shift3" => 1, 
       "time4" => "", 
       "shift4" => "" 
      ) 

    ); 

配列の垂直方向の読み込みと値を持つアレイのみを取得します。

あなたの目的に合うアレイを再構成します。垂直方向の読み取り後の配列サイズが同じであると仮定します。

$count = count($new_arr["time1"]); // assume same size base on your data 
for ($i=0; $i<$count;++$i) 
{ 
    $mergArr[] = array( "time1" => $new_arr["time1"][$i], 
          "shift1" => $new_arr["shift1"][$i], 
          "time2" => $new_arr["time2"][$i], 
          "shift2" => $new_arr["shift2"][$i], 
          "time3" => $new_arr["time3"][$i], 
          "shift3" => $new_arr["shift3"][$i], 
          "time4" => $new_arr["time4"][$i], 
          "shift4" => $new_arr["shift4"][$i] 
         ); 
} 

そして最後に、あなたのテーブルを作成するためにforeach($mergArr as $rows)であなたのforeach($summaryResult as $rows)を交換してください。

誰かがプロセスを単純化してこの回答を修復できる場合があります。

このヘルプが必要です。

0

あなたはarray_reducearray_mergearray_filterを使用して、事前に一緒に配列をマージすることができます

$result = array_reduce($summaryResult, function ($carry, $item) { 
    $carry[$item['st_date']] = isset($carry[$item['st_date']]) 
     ? array_merge($carry[$item['st_date']], array_filter($item, 'strval')) 
     : $item; 

    return $carry; 
}, []); 

また、あなたechoデータパターンがあった場合、私はそのための関数を作成することをお勧めので、何のコードの重複はありません。

関連する問題