Valor do array soma do PHP baseado em duplicata textual em outro array

Oct 19 2020

Eu tenho duas matrizes, ambas sempre terão o mesmo comprimento de contagem. Um tem duplos misturados com inteiros, o segundo tem valores textuais (apenas string). Eles se correlacionam, então eu preciso que ambos permaneçam em ordem. Desculpe, não há chaves para trabalhar (por design).

Preciso somar os valores em que tenho duplicatas na matriz que tem strings.

Exemplo

$dataLabelGraph = array(3, 8, 1, 4.85, 1, 0.5, 6.01, 7); $dataCalcGraph = array("Coding", "Web development - Coding", "Meeting", "Coding", "Coding", "Content", "Coding", "Coding");

Então, meu algoritmo deve ficar assim após

$dataLabelGraph = array(21.86, 8, 1, 0.5); $dataCalcGraph = array("Coding", "Web development - Coding", "Meeting", "Content");

Eu estava tentando adaptar esta solução, do cérebro incrível de Martin D. @https://stackoverflow.com/a/22071693/12835769

$records_array = array("Coding", "Web development - Coding", "Meeting", "Coding", "Coding", "Content", "Coding"); $quantities_array = array(3, 8, 1, 4.85, 1, 0.5, 6.01, 7);
$new_array = array(); foreach ($records_array as $record_position => $new_array_key){
    $new_array[$new_array_key] += $quantities_array[$record_position];
}
var_dump($new_array);

Dá algo assim, que está próximo, mas preciso que eles permaneçam em duas matrizes separadas

array (size=4)
  'Coding' => float 21.86
  'Web development - Coding' => int 8
  'Meeting' => int 1
  'Content' => float 0.5

Qualquer ajuda para me ultrapassar seria imensamente útil. Kudos.

Respostas

1 mickmackusa Oct 19 2020 at 09:38

Agrupe pelo "nome" e some à medida que itera. Quando o loop terminar, divida as chaves e os valores em matrizes separadas.

Código: ( Demo )

$records = [ "Coding", "Web development - Coding", "Meeting", "Coding", "Coding", "Content", "Coding", "Coding" ]; $quantities = [
    3,
    8,
    1,
    4.85,
    1,
    0.5,
    6.01,
    7
];

$result = []; foreach ($records as $index => $label){
    $result[$label] = ($result[$label] ?? 0) + $quantities[$index];
}
var_export(array_keys($result)); var_export(array_values($result));

Saídas:

array (
  0 => 'Coding',
  1 => 'Web development - Coding',
  2 => 'Meeting',
  3 => 'Content',
)

array (
  0 => 21.86,
  1 => 8,
  2 => 1,
  3 => 0.5,
)