2015-10-19 50 views
-1

我有一個多維數組。添加了多個字符串多次出現的值,多維數組在PHP

我需要一種方式來總結出當兩個第一和陣列中的第二字符串中出現多次的總價值。

因此,例如: 黃金金屬= 22 黑色托斯卡諾= 26

等等

任何想法?

[0] => Array 
     (
      [0] => Array 
       (
        [0] => Black 
        [1] => Toscano 
        [2] => 14 
       ) 

      [1] => Array 
       (
        [0] => Gold 
        [1] => Metallic 
        [2] => 10 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [0] => Gold 
        [1] => Metallic 
        [2] => 12 
       ) 

      [1] => Array 
       (
        [0] => Black 
        [1] => Toscano 
        [2] => 12 
       ) 

     ) 
+0

我使用in_array來搜索特定字符串嘗試,但我要去可能有幾十個組合的所以這可能不會是有效的。 – Daelan

回答

0

應該是一個簡單的循環數據和存儲和數組的例子。這是使用帶密鑰的散列作爲與分隔符標記值連接的對的一種可能性。

$separator = "||"; //take care to choose something that doesn't pop up in your data here 
//$data = example data; 
$pairs = array(); 

foreach ($data as $val) { 
    foreach ($val as $pair) { 
     $str = $pair[0] . $separator . $pair[1]; 
     if (array_key_exists($str, $pairs)) 
      $pairs[$str] += $pair[2]; 
     else 
      $pairs[$str] = $pair[2]; 
    } 
} 

print_r($pairs); 

output: 

["Black||Toscano"] => 26, 
["Gold||Metallic"] => 22 

的數據可以在這一點上很容易地檢索

foreach ($pairs as $str => $sum) { 
    $str = explode($separator, $str); 
    echo $str[0] . ", " . $str[1] . ": " . $sum; 
} 
+0

這正是我需要讓我朝着正確的方向發展。謝謝。 – Daelan

1

這正好解決了這個問題,爲您的數據結構,所以你必須確保,在實踐中,每兩個項目,你會得到一個數。希望你能學到一些東西從這個:)

$products = array(
    array(
     array("Black", "Toscano", 14), 
     array("Gold", "Metallic", 10) 
    ), 
    array(
     array("Black", "Toscano", 12), 
     array("Gold", "Metallic", 12) 
    ), 
); 


$accumulated = array(); 
$key = ""; 

$callback = function($item, $index) use(&$key, &$accumulated) { 
    if($index != 2) { 
     $key .= $item; 
    } else { 
     if(!array_key_exists($key, $accumulated)) { 
      $accumulated[$key] = 0; 
     } 
     $accumulated[$key] += $item; 
     $key = ""; 
    } 
}; 

array_walk_recursive($products, $callback); 
var_dump($accumulated);