Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raul Fernando Genz

Problema com Array

Recommended Posts

Conteúdo do ArrayPreciso separar por data o total de que cada pessoa produziu num diaArray(    [0] => Array        (            [operador] => Joao            [dia] => 02/01/2013            [total] => 2        )    [1] => Array        (            [operador] => Joao            [dia] => 03/01/2013            [total] => 6        )    [2] => Array        (            [operador] => Maria            [dia] => 03/01/2013            [total] => 4        )    [3] => Array        (            [operador] => Joao            [dia] => 04/01/2013            [total] => 7        )    [4] => Array        (            [operador] => Maria            [dia] => 04/01/2013            [total] => 4        ))
Nao estou conseguindo validar isso, quero gerar um novo array, com a saida parecida com à abaixo:

Onde as data serão indices 02/01/2013 Joao= 2 03/01/2013 Glauber = 6 Maria= 4 04/01/2013 Joao= 7 Maria= 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

É tipo assim...?

 

 

Script

 

$array =
[
  [
      'operador' => "Joao",
      'dia' => "02/01/2013",
      'total' => 2
  ],[
      'operador' => "Joao",
      'dia' => "03/01/2013",
      'total' => 6
  ],[
      'operador' => "Maria",
      'dia' => "03/01/2013",
      'total' => 4
  ],[
      'operador' => "Joao",
      'dia' => "04/01/2013",
      'total' => 7
  ],[
      'operador' => "Maria",
      'dia' => "04/01/2013",
      'total' => 4
  ]
];

$novo_arr = [];

foreach ($array as $arr)
{        
    $novo_arr[$arr['dia']][$arr['operador']] =
      isset($novo_arr[$arr['dia']][$arr['operador']]) ?
        $novo_arr[$arr['dia']][$arr['operador']] + $arr['total'] :
        $arr['total'];
}

var_dump($novo_arr);

 

Resultado

 


array(3) {
  ["02/01/2013"]=>
  array(1) {
    ["Joao"]=>
    int(2)
  }
  ["03/01/2013"]=>
  array(2) {
    ["Joao"]=>
    int(6)
    ["Maria"]=>
    int(4)
  }
  ["04/01/2013"]=>
  array(2) {
    ["Joao"]=>
    int(7)
    ["Maria"]=>
    int(4)
  }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show, só tem um detalhe

 

 

 

Array(    [02/01/2013] => Array        (            [Joao] => 2        )    [03/01/2013] => Array        (            [Joao] => 6            [Maria] => 4        )    [04/01/2013] => Array        (            [Joao] => 7            [Maria] => 4        ))No dia  02/01/2013 Maria nao fez nada, por isso quero atribuir 0 em todas que ela nao fizer nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterações tendo o laço foreach do código anterior como referencia:

 

// Adicione isso ANTES do foreach
$operadores = [];



    // Coloque isso DENTRO do foreach
    $operadores []= $arr['operador'];



// Adicione isso APÓS o foreach
function adiciona_zeros(&$data, $chave, $operadores) {
   
    $operadores_dia = array_keys($data);   
    
    foreach ($operadores as $operador)
    {
        if (false === array_search($operador, $operadores_dia)) {
            $data[$operador] = 0;
        }
    }
    
    
}
array_walk($novo_arr, 'adiciona_zeros', array_unique($operadores));

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.