Array dentro array con indici che variano

di il
2 risposte

Array dentro array con indici che variano

Mi scuso se non so dare bene un titolo a questa mia richiesta. 

Da una select nel db mysql che mi mostra dei dati di un utente (che seleziono tramite id)

SELECT Tipo, COUNT(*) AS occorrenze FROM MyTable WHERE id_nominativo=$id
GROUP BY Tipo
UNION
SELECT 'TOTALE', COUNT(Tipo) AS occorrenze FROM MyTable WHERE id_nominativo=$id

che su phpmyadmin mi da' un risultato del genere

Tipo		occorrenze	
p			2
r			1
TOTALE		3

produco dei dati in questo modo

while ($row = $result->fetch_assoc())
{  
	print_r($row);
}

Come risultato ottengo una cosa del genere (ne metto TRE presi da 3 ID differenti per evidenziare le diversità dei Tipo vari) inseriti nella query)

Con ID=5
Array ( [Tipo] => a [occorrenze] => 2 )
Array ( [Tipo] => p [occorrenze] => 1 )
Array ( [Tipo] => TOTALE [occorrenze] => 3 )

Con ID=6
Array ( [Tipo] => a [occorrenze] => 3 )
Array ( [Tipo] => TOTALE [occorrenze] => 3 )

Con ID=7
Array ( [Tipo] => r [occorrenze] => 3 )
Array ( [Tipo] => TOTALE [occorrenze] => 3 )

Etc Etc...  

Ecco. Come posso prendere questi dati ed utilizzalri singolarmente (non voglio mostrare un semplice tabella)?

Vorrei ad esempio mettere un testo tipo  “L'utente Id_5 ha totalizzato 3 occorrenze suddivise in 2 di tipo ‘a’ e 1 di tipo ‘p’”. 

Se poi esco da qui ed entro nella pagina con un altro id ad esempio 6  dovrei invece mostrare lo stesso testo ma con gli altri valori (totale 3 ma solo a=3)

Spero di essermi spiegato. . 

2 Risposte

  • Re: Array dentro array con indici che variano

    In questo caso ti consiglierei di calcolare il totale lato php, come ti ho suggerito nell'altro topic.
    Quindi per prima cosa eliminare il calcolo del totale dalla query di modo che rimanga così:

    SELECT Tipo, COUNT(*) AS occorrenze FROM MyTable WHERE id_nominativo=$id GROUP BY Tipo ORDER BY occorrenze DESC


    Sempre seguendo le risorse che ti ho linkato altrove, usare il fetch_all per recuperare tutto in un colpo e la combinazione di array_sum e array_column per il totale:

    $rows = $result->fetch_all(MYSQLI_ASSOC);
    $totale = array_sum(array_column($rows, 'occorrenze'));

    A questo punto si tratta soltanto di formattare i dati per la presentazione:

    $messaggio_tipi = implode(' e ', array_map(function($row){return "{$row['occorrenze']} di tipo '{$row['Tipo']}'";}, $rows));
    echo "L'utente Id_{$id} ha totalizzato {$totale} occorrenze suddivise in {$messaggio_tipi}";
  • Re: Array dentro array con indici che variano

    Grazie mille 

Devi accedere o registrarti per scrivere nel forum
2 risposte