2013-12-24 3 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

начала с 'Еогеаспом()' цикл –

+0

Я получил, что далеко ... Это немного волосатое когда я попадаю в foreach внутри foreach и независимо от того, установлено ли это предыдущее значение или нет ... то есть в массиве 1 нет предыдущего экземпляра «персиков», а в массиве 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, 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); 

Должно быть само за себя, так как все, что вы делаете, принимая продукт всех низших элементов уровня с теми же ключами.

Смежные вопросы