2015-07-10 95 views
1

我有一個大的多維數組,看起來像這樣(日期值是年 - 月 - 日):進出多維數組

$current_branch = array(
      array('2014-05-26',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2014-05-27',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2014-05-28',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2014-05-29',100,16600,20600,3000,80,15000,18000, 2000), 
      array('2014-05-30',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2014-05-31',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2014-06-02',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-06-03',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-06-04',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-06-05',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-06-07',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-06-08',100,100,20600,3000,80,15000,18000, 2000), 
      array('2014-06-09',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-06-10',100,12000,20600,3000,80,15000,18000, 2000), 
      array('2014-07-01',100,11000,20600,3000,80,15000,18000, 2000), 
      array('2014-07-02',100,14000,20600,3000,120,15000,18000, 2000), 
      array('2014-07-03',90,12000,20300,3000,140,15000,18000, 2000), 
      array('2014-07-04',90,12000,20300,3000,140,15000,18000, 2000), 
      array('2014-07-05',90,12000,20300,3000,140,15000,18000, 2000), 
      array('2014-07-06',80,11000,19300,3000,140,15000,18000, 2000), 
      array('2014-07-07',130,11000,19300,3000,140,15000,20000, 2000), 
      array('2014-07-08',130,11000,19300,3000,140,15000,20000, 2000), 
      array('2014-07-09',120,10000,19200,3100,140,16000,21000, 2000), 
      array('2015-05-01',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-05-02',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-05-03',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-05-04',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-05-05',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-06-01',100,17200,20600,3000,80,15000,18000, 2000), 
      array('2015-06-02',100,17300,20600,3000,80,15000,18000, 2000), 
      array('2015-06-03',100,17400,20600,3000,80,15000,18000, 2000), 
      array('2015-06-04',100,17500,20600,3000,80,15000,18000, 2000), 
      array('2015-06-06',100,17700,20600,3000,80,15000,18000, 2000), 
      array('2015-06-07',100,17800,20600,3000,80,15000,18000, 2000), 
      array('2015-06-08',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-06-09',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-06-10',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-06-20',100,17600,20600,3000,80,15000,18000, 2000), 
      array('2015-06-30',144,14600,20600,3000,80,15000,18000, 2000), 
      array('2015-07-01',144,11600,17600,2000,80,13000,12000, 5000), 
      array('2015-07-02',144,14600,20600,3000,80,15000,18000, 2000), 
      array('2015-07-03',154,15600,21600,4000,90,15000,18000, 2000), 
      array('2015-07-04',154,15600,21600,4000,90,15000,18000, 2000), 
      array('2015-07-05',154,15600,21600,4000,90,15000,18000, 2000), 
      array('2015-07-06',124,13600,20600,4000,90,15000,18000, 2000), 
      array('2015-07-07',124,2600,600,28000,90,15000,18000, 2000), 
      array('2015-07-08',124,2300,21600,3000,90,14000,19000, 2100), 
      array('2015-07-09',124,2800,21600,4100,90,15000,18000, 2000) 
      ); 

正如你可以看到,一些日期和這樣的缺失。現在,數組索引已將設置爲數字,因爲我不幸(使用預定義的soap服務器的結果)進行數值計算,但這很好,因爲可以將精確的筆記作爲值,並且它們是;銷售日期,以現金出售的數量,當天的現金淨額等...

我想知道的是我該如何操作這個龐大的數組以便獲取當月的總淨值(爲例子的緣故讓說的第3個值是當天的淨值),並輸出到一個數組,看起來像這樣:

$this_year_value = 2015; 
$i=01; 
foreach ($current_branch as $key => $value) { 
    $i_padded = sprintf("%02d", $i); // so 01, 02, 03, etc 
    $month_comparison = $this_year_value."-".$i_padded; 
    $cut_soap_date = substr($value[0],0,7); // try to get 2015-MONTH 
    if ($cut_soap_date == $month_comparison) { 
     $year_chart_data = array($i_padded, $value[2]); 
    } 
$i++; 
} 

$data = array(
    array('jan', $jan_month_net), array('feb', $feb_month_net), 
    array('mar', $mar_month_net), array('apr', ...), 
    array('may', ...), array('jun', ...), 
    array('jul', ...), array('aug', ...), 
    array('sept', ...), array('oct', ...), 
    array('nov', ...), array('dec', ...) 
); 

我使用foreach嘗試這個代碼有一個根本的缺陷,因爲$我會在每一個foreach上增加,從來沒有提供正確比較當前的foreach月份指針。這是我對想法不甚瞭解的地方,如果有的話可以提供,那就太棒了。

+0

的arrage數據不*有*是在一個數字陣列僅僅因爲這是SOAP服務如何提供給您。一旦它到達您的程序中,您可以隨意更改格式以適應自己的程序。 – Simba

+0

好的,感謝那些信息,在某個時候可能會很方便!我想我現在會離開它,因爲我已經習慣了哈哈。 – Ridai

回答

0
$this_year_value = 2015; 

// Make array before 
$data = array(
    array('jan', 0), array('feb', 0), 
    array('mar', 0), array('apr', 0), 
    array('may', 0), array('jun', 0), 
    array('jul', 0), array('aug', 0), 
    array('sept', 0), array('oct', 0), 
    array('nov', 0), array('dec', 0) 
); 

// fill array 
foreach ($current_branch as $key => $value) { 
    // take second part of date 
    $month_comparison = explode('-', $value[0])[1]; 
    $cut_soap_date = substr($value[0],0,7); // try to get 2015-MONTH 
    if ($cut_soap_date == $this_year_value."-".$month_comparison) { 
     // write to result array 
     $data[$month_comparison-1][1] += $value[2]; 
    } 
} 

var_export($data); 
+0

哦,我明白了!我甚至沒有考慮使用爆炸,這是非常有用的,謝謝。 – Ridai

+0

很高興幫助。祝你好運! – splash58

0

如何只增加$ i如果日期不匹配

if ($cut_soap_date == $month_comparison) { 
    $year_chart_data = array($i_padded, $value[2]); 
} else { 
    $i++; 
} 
+0

'$ cut_soap_date'可以從任何數字開始(即如果傳遞給我的數組只有幾個月6月到11月,它將在6月6日等)。因此,'$ i'繼續迭代而不匹配。 – Ridai

+0

我在想它需要以某種方式發現它與cut_soap_date在同一個月,並且一直保留它,直到cut_soap_date移動到下一個月,但實際上該怎麼做? – Ridai