2013-12-24 42 views
0

我试过寻找这个,因为我不认为这是独一无二的,没有人试图去做。我只是无法找出正确的关键字来寻找我的答案!多维数组的PHP乘法值

我有这样的阵列

array(
0 => array(
     'oranges'=> 4.00, 
     'apples' => 2.00, 
    ), 
1 => array(
     'oranges' => 2.00, 
     'apples' => 1.82, 
     'peaches' => 1.2, 
    ), 
2 => array(
     'oranges' => 2.20, 
    ), 
); 

我想要做的是找到所有的橘子值的值相乘左右(4 * 2 * 2.20)和所有的苹果的值相乘左右(2 * 1.82)。 值的数组数量是可变的,并且数组内的值的数量是可变的。

+3

开始用'的foreach()'循环 – 2013-12-24 01:19:10

+0

我得那么远......这是一个有点毛茸茸当我在foreach中遇到foreach以及它们是否是先前的值集合时,即在array 1中,没有先前的“桃子”实例,并且在array 2仅存在桔子。 – scottphpnewbie

+0

我已经给你一个答案,下次发布你的代码,以便我们可以看到你到目前为止尝试过的东西! – sjagr

回答

2

虽然sjagr的答案是最好的解决方案可能的,我有array_column(PHP 5> = 5.5.0),其仅需要一个foreach环的另一种方法:

<?php 
$arr = array(
    array(
     "oranges" => 4.00, 
     "apples" => 2.00 
    ), 
    array(
     "oranges" => 2.00, 
     "apples" => 1.82, 
     "peaches" => 1.2 
    ), 
    array(
     "oranges" => 2.20 
    ) 
); 
$_arr = array(); 
    foreach(array("oranges", "apples", "peaches") as $val){ 
    $_arr[$val] = array_product(array_column($arr, $val)); 
    } 
print_r($_arr); 
?> 

其结果将是:

Array 
(
    [oranges] => 17.6 
    [apples] => 3.64 
    [peaches] => 1.2 
) 

演示:https://eval.in/82322

3

这使用foreach,0 isset和您的普通的if/else语句的组合。因为所有你做的是所有使用相同的按键的最低水平元素的产品

$products = array(); 
foreach ($array as $a) { 
    foreach ($a as $key => $value) { 
     if (!isset($products[$key])) $products[$key] = $value; 
     else $products[$key] = $products[$key] * $value; 
    } 
} 

var_dump($products); 

应该是不言自明的。