2011-06-09 94 views
-4

我主要是用於業務系統的語言編程,並且有一個有用的內置函數可以對數組進行求和。例如,我們已經得到了數組是這樣的:在PHP中彙總數組

red | 1 
red | 1 
green | 1 
orange | 2 
orange | 1 
orange | 1 
blue | 1 

使用功能總結後,我們得到

red | 2 
green | 1 
orange | 4 
blue | 1 

難道同等功能在PHP?

UPD。

$array = array('red'=>1,'red'=>2,'green'=>1....); 
+0

究竟是如何做的陣列的外觀喜歡?如果在第一個例子中,左側是鍵,右側是值,那麼這是不可能的。一個鍵只能在數組中存在**一次**。 – 2011-06-09 07:25:01

+0

什麼是數組結構?數組 – 2011-06-09 07:25:51

+0

中只能加上 – Tuco 2011-06-09 07:30:37

回答

0

您的初始數組應該只包含值。你可以使用array_values()。在此之後,你可以用array_count_values()

http://php.net/manual/en/function.array-count-values.php

+0

他不能使用'array_values()',因爲結果將是無意義的(或者如果是二維數組,則與輸入相同)。 – binaryLV 2011-06-09 07:29:42

+0

你認爲陣列看起來像什麼?他不想計算所有的'1',而是根據顏色對數值進行求和。 – 2011-06-09 07:29:52

+0

後來被添加到問題:)一個不正確的數組是精確的 – 2011-06-09 07:57:22

3

算值在PHP

red | 1 
red | 1 
green | 1 
orange | 2 
orange | 1 
orange | 1 
blue | 1 

這種陣列是不可能的。 PHP數組不能有多個具有相同名稱的索引鍵。它將覆蓋前一個。

0

認爲你有數組是這樣的:

$array = array(
    'red | 1', 
    'red | 1', 
    'green | 1', 
    'orange | 2', 
    'orange | 1', 
    'orange | 1', 
    'blue | 1' 
); 

你可以這樣處理的:

<?php 
//process the array data 
$temp_output = array(); 
foreach($array as $raw) 
{ 
    list($name, $value) = array_map('trim', explode("|", $raw)); 
    if(!isset($temp_output[ $name ])) 
     $temp_output[ $name ] = (int)$value; 
    else 
     $temp_output[ $name ] += (int)$value; 
} 
//now, print the value 
foreach($temp_output as $key => $data) 
{ 
    echo "{$key} | {$data}\n"; 
} 
?> 
1

至於說,像

array('red'=>1,'red'=>2,'green'=>1....); 

數組是不可能的。試試吧,並製作一個print_r。您將看到只有一個red條目的值爲2(或最後一個值是什麼)。最後一個將覆蓋以前的。

根據您創建數組的方式,您可以即時總結數值,例如,

for(...) { 

    if(!isset($array[$color])) { 
     $array[$color] = 0; 
    } 

    $array[$color] += $value; 

} 

或創建多維數組:

$array = array(
    'red'=> array(1,2), 
    'green'=> array(1), 
    ... 
); 

然後,您可以array_map遍歷並計算每個條目的總和與array_sum

$newarray = array_map('array_sum', $array);