Foreach - a chave de um array para nomear outro array

Ola, sou iniciante em php e estou com um probleminha.
O problema: eu tenho o array multidimencional “$compras[codigo do cliente][o que o cliente já comprou]”, em seguida fiz o “asort” para ordenar os clientes e a partir dai começa meu problema. Eu coloco o “foreach” para somar as compras de cada cliente e depois coloco em outro array ($total) indexado pelo código do cliente contendo a soma de todas as compras.
Porem, está dando erro. Fiz um teste com “echo $total[0104];” para apareceria o total 750, mas só dá erro. Já fiz varias mudanças, com tudo que já aprendi em php e nada.
Segue abaixo tudo que já fiz:

$compras = array();
$compras[0104][] = 150;
$compras[0104][] = 250;
$compras[0052][] = 200;
$compras[0100][] = 50;
$compras[0104][] = 350;

$total = array();

asort($compras);
$v = 0;
foreach($compras as $cliente) 
{

	foreach($cliente  as $comprou => $valor)
	{
		$v += $valor;

	}
	
	$total["$cliente"] = $v;
	$v = 0;
}


echo $total[0104];

Altere essa duas linhas onde foram comentadas

//foreach($compras as $cliente)  // Nesse caso a variável $cliente é o array dos produtos
foreach ($compras as $cliente => $produtos) //NOVA LINHA
{
    //foreach($cliente  as $comprou => $valor) // A variável $cliente era o array de produtos não de cliente
    foreach($produtos  as $comprou => $valor) //NOVA LINHA, nesse caso também poderia ser foreach($produtos  as $valor), já que a variável $comprou não esta sendo utilizada
    {
        $v += $valor;
    }
    $total["$cliente"] = $v; // OBS: aqui estava tentando setar a chave, mas $cliente era um array de produtos não o código do cliente
    $v = 0;

}

http://php.net/manual/pt_BR/control-structures.foreach.php
O foreach pode ser usado nessas duas maneiras

foreach ($array as $valor)

ou

foreach ($array as $chave => $valor)

Obg pela ajuda celioyutak. Mas ainda fica dando erro.

<?php
$compras = array();
$compras[0104][] = 150;
$compras[0104][] = 250;
$compras[0052][] = 200;
$compras[0100][] = 50;
$compras[0104][] = 350;

$total = array();

asort($compras);

$v = 0;
foreach($compras as $cliente => $cod) 
{
	foreach($cod  as $comprou => $valor)
	{
		$v += $valor;
	}
	
	$total["$cod"] = $v;
	$v = 0;
}
echo $total[0104];

E amensagem de erro foi:

NOTICE Array to string conversion on line number 21

NOTICE Array to string conversion on line number 21

NOTICE Array to string conversion on line number 21

NOTICE Undefined offset: 68 on line number 24

A linha 21 é : $total["$cod"] = $v;
A linha 24 é : echo $total[0104];

<?php
$compras = array();
$compras[0104][] = 150;
$compras[0104][] = 250;
$compras[0052][] = 200;
$compras[0100][] = 50;
$compras[0104][] = 350;

$total = array();

asort($compras);
$v = 0;
foreach($compras as $cliente => $produtos) 
{

    foreach($produtos  as $comprou => $valor)
    {
        $v += $valor;

    }
    
    $total[$cliente] = $v;
    $v = 0;
}


echo $total[0104];

Nessa linha, você esta definindo a chave como se fosse um array, no seu foreach a variável $cod é o array em que esta os produtos que o cliente esta comprando.

$total["$cod"] = $v;

O correto aqui seria colocar o $cliente

$total[$cliente] = $v;
1 curtida

Código:

<?php

	$compras = array();
	$compras['0104'][] = 150;
	$compras['0104'][] = 250;
	$compras['0052'][] = 200;
	$compras['0100'][] = 50;
	$compras['0104'][] = 350;
		
	$total = array();
	foreach ($compras as $key => $values) 
	{			
		foreach ($values as $value) 
		{
			if (in_array($key, array_keys($total)))
			{
				$total[$key] += $value;		
			}
			else
			{
				$total[$key] = $value;	
			}
		}
	}

	print_r($total);

Saida:

Array ( [0104] => 750 [0052] => 200 [0100] => 50 )

Ou esse ainda melhor:

<?php

	$compras = array();
	$compras['0104'][] = 150;
	$compras['0104'][] = 250;
	$compras['0052'][] = 200;
	$compras['0100'][] = 50;
	$compras['0104'][] = 350;

	$total = array();
	foreach ($compras as $key => $values) 
	{			
		$total[$key] = array_sum($values);
	}

	print_r($total);

Observação: olha só como você colocou 0104 ele precisa ser uma string ou seja, ‘0104’ se não o PHP converte para número ( se não me engano é relacionado a isso)

Obrigado galera vc me ajudarão pra caraba . To penando mas se Deus quiser vou conseguir aprender php.

Dragoon, infelizmente nesse meu problema os identificadores dos clientes devem ser numérico e não podem ser string. Mas vlw memo assim. eu não conhecia o “in_array()”