2015-10-19 49 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);