2010-03-17 158 views
4
print "<ul>"; 
foreach ($arr as $value) { 
    echo("<li>" . $value[storeid] . " " . ($value[dvdstock] + $value[vhsstock]) . "</li>"); 
} 
print "</ul>"; 

將輸出PHP - While循環

•2 20 
•2 10 
•1 20 
•1 20 
•1 10 

我在想,所以輸出每個&值STOREID]總價值我將如何適應這個循環

•1 50 
•2 30 

感謝非常太多:)

+0

如果這些值來自數據庫,那麼您將不得不相應地更改您的sql,以便結果集也包含總數。 – 2010-03-17 10:46:55

回答

1

使用另一個數組來計算出你需要的值:

// setup a quick place to store the data 
$stores = array(); 
foreach ($arr as $value) { 
    if(!isset($stores[$value['storeid']])){ // init check required to avoid Notices 
     $stores[$value['storeid']] = $value['dvdstock'] + $value['vhsstock']; 
    }else{ 
     $stores[$value['storeid']] += $value['dvdstock'] + $value['vhsstock']; 
    } 
} 
ksort($stores); // sort by storeid ASC 

print "<ul>"; 
// loop through the new data 
foreach ($stores as $id => $value) { 
    echo("<li>" . $id . " " . ($value) . "</li>"); 
} 
print "</ul>"; 

Demo Link

-1

正確版本:

<?php 

$initial = array (
    array (
     'id'  => 1, 
     'amount' => 10 
    ), 
    array (
     'id'  => 1, 
     'amount' => 10 
    ), 
    array (
     'id'  => 2, 
     'amount' => 20 
    ), 
    array (
     'id'  => 2, 
     'amount' => 20 
    ), 
    array (
     'id'  => 2, 
     'amount' => 20 
    ), 
); 

$result = array(); 

foreach ($initial as $value) { 
    $result[$value['id']] += $value['amount']; 
} 

print_r($result); 

?> 
+0

我懷疑這會做任何有用的事情,它基本上是將數組從一個數組複製到另一個數組,但是使用'+ =' – gnarf 2010-03-17 10:43:12

+0

WTF,不,它會通過初始數組,並總結每個唯一鍵的總數。 – 2010-03-17 10:49:53

+0

對不起,我的壞。編輯:http://codepad.org/i0ETIeKO – 2010-03-17 11:00:47

1

如果從一個SQL數據庫中獲取的數據,那麼你應該做到這一點使用SUM()功能的SQL,因爲它效率更高。如果數據源是從別的地方,你應該做這樣的事情:

//Sum data 
foreach ($arr as $value) { 
    if (!isset($sums[$value['storeid']])) { // init check required to avoid Notices 
     $sums[$value['storeid']] = $value['dvdstock'] + $value['vhsstock']; 
    } else { 
     $sums[$value['storeid']] += $value['dvdstock'] + $value['vhsstock']; 
    } 
} 
ksort($sums); // sort by storeid ASC 

print "<ul>"; 
foreach ($sums as $key => $sum) { 
    echo("<li>$key $sum</li>"); 
} 
print "</ul>"; 

Demo Link

+0

如果你是總結,爲什麼不'select SELECT storeid,SUM(dvdstock + vhsstock)作爲股票FROM TABLE storestock GROUP BY storeid'? – gnarf 2010-03-17 10:44:31

+0

@gnarf:你讀過第一句話嗎?:*如果你從SQL數據庫中獲取數據,那麼你應該在SQL中使用SUM()函數,因爲它更有效* – 2010-03-17 10:46:40

+0

你看了我的評論嗎?我讀了第一句話,然後說:「爲什麼他不在查詢中加入dvdstock和vhsstock呢?」 ;) - 另外,我認爲使用'SUM()'的示例SQL查詢可能對考慮問題的OP有用。 – gnarf 2010-03-17 10:50:11

-1
<?php 
$sums = array(); 
foreach ($arr as $value) 
{ 
    $sums[$value['storeid']] += $value['dvdstock']; 
} 
print_r($sums); 
?> 
+0

我已經downvoted這個代碼的答案,因爲它不提供所需的輸出,它會產生聲明。如果你能夠編輯這個答案來形成一個獨特的,有價值的方法,我會考慮刪除我的downvote,並可能upvoting它。否則,請考慮刪除此帖子以減少頁面膨脹。 – mickmackusa 2017-10-25 12:43:15

+0

謝謝,@mickmackusa,但我認爲這個答案很好,因爲它是。我知道代碼並不完美,但我認爲StackOverflow並不意味着canihazthecodes站點。我答案中的代碼顯示瞭解決方案的概念。這並不意味着要在生產代碼中進行復制粘貼。 – Sjoerd 2017-10-30 07:46:25

0

這是一個for循環,你必須讓他們兩個。首先要計算總和,然後遍歷這些值:

$data = array(); 

foreach ($arr as $value) { 
    if (!isset($data[$value['storeid']])) { // init check required to avoid Notices 
     $data[$value['storeid']] = $value['dvdstock'] + $value['vhsstock']; 
    } else { 
     $data[$value['storeid']] += $value['dvdstock'] + $value['vhsstock']; 
    }  
} 
ksort($data); // sort by storeid ASC 

print "<ul>"; 
foreach ($data as $storeid => $sum) { 
    echo('<li>' . $storeid . ' ' . ($sum) . '</li>'); 
} 
print "</ul>"; 

Demo Link

順便說一下一個字關於字符串:
無論是使用單引號'與串聯.'foo: ' . $bar
或雙引號"並將變量放入字符串中:"foo: $bar"