iT邦幫忙

0

PHP Array 累加!!!

php

Dear 前輩們~
有關於陣列問題想發問~
從異質系統拉出一些資料,好不容易把陣列資料都拉到變數陣列,不過想再從這個陣列變數在php一格一格陣列裡累加成我最後的EXCEL的格式(一直累加下去),是否可行?!

		$my_array=null;
		foreach ($result["IT_TEST"] as $AAA) {

		
		 $my_array[]=$AAA;

        }
		print '<pre>';
		print_r ($my_array);
		print '<pre>';

http://ithelp.ithome.com.tw/upload/images/20170804/20089833noZAZjeCVs.jpg

louischou iT邦新手 4 級 ‧ 2017-08-04 18:34:03 檢舉
$my_array[]=$AAA;
$my_array2[]+=$AAA;

2 個回答

1
mike8864aabb
iT邦新手 5 級 ‧ 2017-08-05 00:27:43

試試吧

$my_array=null;
$my_array_sum=null;//累加用
$result["IT_TEST"]=array(2704558,2542468,2966324,3152991);

foreach ($result["IT_TEST"] as $AAA) {
	$my_array[]=$AAA;
	$my_array_sum[]= ( $my_array_sum==null?$AAA:($my_array_sum[(count($my_array_sum)-1)])+$AAA );
	//將上一個累加結果+目前的值
	
}

print '<pre>';
print_r ($my_array);
print_r ($my_array_sum);//累加結果
print '<pre>';
看更多先前的回應...收起先前的回應...

因為php的泛型設計允許你變數這樣設
但建議:

$my_array=[];
$my_array_sum=[];

即使是在php也儘量養成單一變數單一型態。
在其他的語言,你這樣寫會直接跟你說型態不符。
另外其實善用一下array相關函式就得到你要的了:

foreach ($result["IT_TEST"] as $value) {
	$my_array[] = $value;
	$my_array_sum[] = array_sum($my_array);
}

不過如果說是要做為資料集合,其實最好是這樣做:
(我把table也秀出來了)

<?php
$data = [ 2704558 , 2542468 , 2966324 , 3152991 ];
$results = [];
$sum = 0;

foreach($data as $value){

    $sum += $value;

    $results[] = [
        'value' => $value , 
        'sum' => $sum
        ];

}
?>

<table>
    <tr>
        <th>value</th>
        <th>sum</th>
    </tr>
    <?php foreach($results as $item):?>
    <tr>
        <td><?=$item['value']?></td>
        <td><?=$item['sum']?></td>
    </tr>
    <?php endforeach?>
</table>

不過你既然已經提供答案,我也不發表回答了。

提醒一下,這是使用php5.4+新增的特性

$my_array=[];
$my_array_sum=[];

如果都是用比較新的版本開發

所以說……
除非系統太舊,或是沒有自管server的能力。
現在要嘛不是裝5.6就是7了吧。
除非是客戶需求,不然過舊的系統應該都不被考慮了。
(同時也考量到官方維護的問題。)
就好比現在都建議使用mysqli或pdo而不要再去用mysql指令集一樣的意思。
就又好比php 5.3有namespace,php 5.4支援簡式array以及增加trait的方法擴展。
相信一路玩過各種版本應該都知道每個時代的變革。
但如果是新手上路,當然還是選擇較新較穩定的版本就對了。

fillano iT邦超人 1 級 ‧ 2017-08-07 09:56:07 檢舉

要簡潔的話,我會用array_reduce...

$from = array(1, 2, 3);
$to = array_reduce($from, function($pre, $cur){ return $pre + $cur; }, 0);
echo $to;//6

@費大公 code有錯字XD
還有其實他的問題主要是按次累加而不是一次性全家。
全家就是你家!是一次性「全加」。
(通常打錯字會改,但我打錯字笑出來就不想改了。)

fillano iT邦超人 1 級 ‧ 2017-08-07 11:24:44 檢舉

了解XD

fillano iT邦超人 1 級 ‧ 2017-08-07 11:29:59 檢舉

其實在array_reduce的callback函數裡面也等於在執行iteration,跟for的邏輯是等效的,需要的話只要把程式碼移到callback裡面就可以。從$pre取到的就是之前累加的結果,$to則是最後的總和。

0
wiseguy
iT邦超人 1 級 ‧ 2017-08-07 15:59:07
$my_array=[];
foreach($result["IT_TEST"] as $i => $v) {
   $my_array[$i] = $my_array[$i-1] + $v;
}
print '<pre>';
print_r ($my_array);
print '<pre>';

$my_array[ -1 ] ???

wiseguy iT邦超人 1 級 ‧ 2017-08-07 17:59:12 檢舉

你沒執行看看吧?不存在,就 0 囉!
或是如果你很在乎有沒有 notice,可以把第3行改為
$my_array[$i] = $i ? $my_array[$i-1] + $v : $v;

不太需要執行。
如此不在乎型態又放任未定義變數……
出了事可能怎麼死的都不知道。
以閣下如此有經驗之人怎麼會對此得過且過?

我要發表回答

立即登入回答