2016-11-02 3 views
3

У меня есть этот массив:

$lista_agregados = array('po' => '0', 'brita' => '0'); 

И эти массивы:

$po = array(0 => array('qt' => 12, 'total' => 1234), 
      1 => array('qt' => 45, 'total' => 13224)); 
$brita = array(0 => array('qt' => 54, 'total' => 124), 
      1 => array('qt' => 18, 'total' => 224)); 

Я хочу, чтобы использовать цикл вместо явных операций каждый ключ в $lista_agregados:

$somatorio_mensal['po'] = $po[0]['total'] + $po[1]['total']; 
$somatorio_mensal['brita'] = $brita[0]['total'] + $brita[1]['total']; 

Это то, что я до сих пор:

foreach ($lista_agregados as $key => $value) { 
    $somatorio_mensal["'$key'"] = $key[0]['total'] + $key[1]['total']; 
} 

Проблема заключается в том, что $key[0] интерпретируется как po[0] вместо $po[0]. Есть ли способ сделать эту работу?

+0

несколько вещей: 1) ' "'$ ключ"' предполагая, '$ ключ =«тест "; ваш ключ будет' 'test'', и вам придется получить к нему доступ:' $ arr ["'test'"] ', обратите внимание на одинарные кавычки! Теперь вы, вероятно, хотите использовать только '$ key', поэтому вы получаете доступ к элементу с помощью' $ arr ["test"] '2). Для вашей« проблемы »вы хотите посмотреть переменные переменные в руководстве, например. '$$ key', поэтому вы в основном говорите, что принимаете значение' $ key' как имя переменной, а если '$ key =" po ";' do '$ po'. 3) И последний раз посмотрите на 'array_column()' и 'array_sum()', чтобы скомпоновать все тотальные элементы. – Rizier123

ответ

2

Попробуйте это:

foreach ($lista_agregados as $key => $value) { 
    $somatorio_mensal[$key] = ${$key}[0]['total'] + ${$key}[1]['total']; 
} 
+0

PHP5 или PHP7? ;) – JustOnUnderMillions

+0

он работает на моем php 5.6 –

+1

Хорошо, может быть, дать подсказку: http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect – JustOnUnderMillions

2

Имейте в виду, что у вас есть brita1 как один из ключей, но переменная называется brita. При этом фиксируется, вы можете сделать это следующим образом:

foreach($lista_agregados as $key => $total) { 
    foreach($$key as $k) { 
     $lista_agregados[$key] += $k['total']; 
    } 
} 
3

Используйте функцию под названием variable variables:

foreach ($lista_agregados as $sub => $unused) { 
    // refer to variable called "$" + "$sub" 
    if (!isset(${$sub})) 
    continue; 
    $a = ${$sub}; 

    if (! is_array($a)) 
    continue; 

    $somatorio_mensal[$sub] = 0; 
    foreach ($a as $k => $v) 
    $somatorio_mensal[$sub] += $v['total']; 
} 
Смежные вопросы