2015-08-16 114 views
-1

我有這個PHP代碼,3 foreach循環和最後一個或可能是第二個導致數組重置在某些時候,我找不到原因?PHP Foreach嵌套循環和陣列本身在中間重置

PHP代碼:

<?php 
    $months = range(1,12); 
    foreach($accountsubs as $subs){ 
     ?> 
    <tr style="display:none;" class="tablerow paddingzero childoverview <?php echo $classj;?>"> 
    <td width="40" align="center"><?php echo $subs['codename'];?></td> 
    <td><?php echo $subs['subclass'];?></td> 
    <?php 
    $itemcodes = $db->fetch_all_array("SELECT * FROM bg_itemcodes WHERE accountclass='".$subs['ID']."' and cparent = '".$ac['ID']."' "); 
    $counter = 1; 
    foreach($itemcodes as $code){ 

     foreach($months as $ms){ 
echo $counter++; 
      $makedate = strtotime($jdate.'-'.$ms.'-1'); 
      $sdebits = $db->single("SELECT sum($currency) as $currency FROM bg_journal WHERE factory='$jfactory' 
      AND section = '".$ac['ID']."' AND record_section !='record' AND itemcode = '".$code['ID']."' 
      AND FROM_UNIXTIME(jtime, '%Y%m') = '".date('Ym',$makedate)."' AND inouts = 'out' "); 


      $scredits = $db->single("SELECT sum($currency) as $currency FROM bg_journal WHERE factory='$jfactory' 
      AND section = '".$ac['ID']."' AND record_section !='record' AND itemcode = '".$code['ID']."' 
      AND FROM_UNIXTIME(jtime, '%Y%m') = '".date('Ym',$makedate)."' AND inouts = 'in' "); 


      $totalsdc = $scredits[$currency] - $sdebits[$currency]; 
     ?> 
    <td class="alignright"><?php echo correctvalue($totalsdc,$jcurrency);?></td> 
    <?php 
     }// foreach months 
    }// foreach item codes 
    ?> 
    </tr> 
    <?php 

    }// foreach sub class 

,這裏是你可以看到它是如何重置3日環路但是它避開了在第二循環計數器觀看源。

<tr style="display:none;" class="tablerow paddingzero childoverview showclass_8"> 
    <td width="40" align="center">103</td> 
    <td>Other Sales</td> 
    1 <td class="alignright"></td> 
    2 <td class="alignright"></td> 
    3 <td class="alignright"></td> 
    4 <td class="alignright"></td> 
    5 <td class="alignright"></td> 
    6 <td class="alignright"></td> 
    7 <td class="alignright"></td> 
    8 <td class="alignright"><span style="float:left; color:#444;">؋</span>1,000.00</td> 
    9 <td class="alignright"></td> 
    10 <td class="alignright"></td> 
    11 <td class="alignright"></td> 
    12 <td class="alignright"></td> 
     </tr> 
    <tr class="tablerow paddingzero overviewtitle"> 
    <td align='center'><strong>400</strong></td> 
    <td style="text-transform:capitalize;">expenses <a href="javascript:void(0);" data-id="showclass_10" class="addplus plus">+</a></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong><span style="float:left; color:#444;">؋</span>-59,200.00</strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     <td class="alignright"><strong></strong></td> 
     </tr> 
    <tr style="display:none;" class="tablerow paddingzero childoverview showclass_10"> 
    <td width="40" align="center">401</td> 
    <td>Raw Materials</td> 
    1 <td class="alignright"></td> 
    2 <td class="alignright"></td> 
    3 <td class="alignright"></td> 
    4 <td class="alignright"></td> 
    5 <td class="alignright"></td> 
    6 <td class="alignright"></td> 
    7 <td class="alignright"></td> 
    8 <td class="alignright"></td> 
    9 <td class="alignright"></td> 
    10 <td class="alignright"></td> 
    11 <td class="alignright"></td> 
    12 <td class="alignright"></td> 
    13 <td class="alignright"></td> 
    14 <td class="alignright"></td> 
    15 <td class="alignright"></td> 
    16 <td class="alignright"></td> 
    17 <td class="alignright"></td> 
    18 <td class="alignright"></td> 
    19 <td class="alignright"></td> 
    20 <td class="alignright"><span style="float:left; color:#444;">؋</span>-58,900.00</td> 
    21 <td class="alignright"></td> 
    22 <td class="alignright"></td> 
    23 <td class="alignright"></td> 
    24 <td class="alignright"></td> 
     </tr> 
    <tr style="display:none;" class="tablerow paddingzero childoverview showclass_10"> 
    <td width="40" align="center">402</td> 
    <td>Office Supplies</td> 
    1 <td class="alignright"></td> 
    2 <td class="alignright"></td> 
    3 <td class="alignright"></td> 
    4 <td class="alignright"></td> 
    5 <td class="alignright"></td> 
    6 <td class="alignright"></td> 
    7 <td class="alignright"></td> 
    8 <td class="alignright"><span style="float:left; color:#444;">؋</span>-200.00</td> 
    9 <td class="alignright"></td> 
    10 <td class="alignright"></td> 
    11 <td class="alignright"></td> 
    12 <td class="alignright"></td> 
     </tr> 

resulting this

+0

'$ months'定義在哪裏? – Bankzilla

+0

$ months = range(1,12); – codedudey

+0

在不知道數據結構實際上是什麼樣的情況下,難以調試,因爲我們知道它完全按照它應該做的那樣進行。 – Bankzilla

回答

0

有沒有這樣的事情是發生在這裏陣列復位。如果你檢查你的代碼,那麼你可以清楚地看到變量$counter在項目代碼之前被初始化/重新初始化。因此,合乎邏輯的解釋是子類別Raw Materials爲該查詢返回兩個對象:

$itemcodes = $db->fetch_all_array("SELECT * FROM bg_itemcodes WHERE accountclass='".$subs['ID']."' and cparent = '".$ac['ID']."' "); 

即,您得到2 * 12的時間增量爲$counter,等於24.

您可能希望按項目代碼將每項費用分組,以及爲子類別進行分組。

+0

他們都是獨特的專欄,我不認爲它可能需要分組,您認爲我應該在哪裏放置櫃檯以獲得更好的效果? – codedudey

+0

附加了一個照片的問題,foreach循環和所有其他項目都可以正常工作,但只是在該行它會去2次... – codedudey

+1

@codedudey如果你懶得調試我們給你的信息,那麼只需在'$ itemcodes' foreach循環中設置'$ counter'。 – Bankzilla