Valore dell'array di somma PHP basato sul duplicato testuale in un altro array

Oct 19 2020

Ho due array, entrambi avranno sempre la stessa lunghezza di conteggio. Uno ha doppi mescolati con numeri interi, il secondo ha valori testuali (solo stringa). Sono correlati, quindi ho bisogno che entrambi rimangano in ordine. Spiacenti, nessuna chiave con cui lavorare (in base alla progettazione).

Ho bisogno di sommare i valori in cui ho duplicati nell'array che ha stringhe.

Esempio

$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");

Quindi il mio algoritmo dovrebbe apparire così dopo

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

Stavo cercando di adattare questa soluzione, dal fantastico cervello di 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);

Fornisce qualcosa di simile, che è vicino ma ho bisogno che rimangano in due array separati

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

Qualsiasi aiuto per farmi superare la linea sarebbe immensamente utile. Kudos.

Risposte

1 mickmackusa Oct 19 2020 at 09:38

Raggruppa per "nome" e somma man mano che iterate. Quando il ciclo è finito, dividi le chiavi e i valori in array separati.

Codice: ( 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));

Uscite:

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

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