2015-08-16 61 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