Réorganisation de tableaux

Par Romano83, il y a 11 ans


Bonjour à tous,
je sais que le titre du sujet peut paraître banal mais ça fait plusieurs heures que je me prends la tête à trouver une solution.
Je récupère un tableau après une requète SQL :

array (size=9) 0 => array (size=3) 'date' => string '2015-04-15 07:36:29' (length=19) 'referer' => string 'www.google.fr' (length=13) 'nb' => string '29' (length=2) 1 => array (size=3) 'date' => string '2015-04-15 07:36:29' (length=19) 'referer' => string 'www.google.com' (length=14) 'nb' => string '4' (length=1) 2 => array (size=3) 'date' => string '2015-04-16 07:36:29' (length=19) 'referer' => string 'www.google.fr' (length=13) 'nb' => string '2' (length=1) 3 => array (size=3) 'date' => string '2015-04-16 07:36:29' (length=19) 'referer' => string 'www.google.com' (length=14) 'nb' => string '5' (length=1)

Ce que je voudrais faire, c'est réorganiser ce tableau pour qu'il m'affiche un tableau du style afin de créer un graphique :

['date', 'www.google.fr', 'www.google.com', ...], ['2015-04-15 07:36:29', '29', '4'], ['2015-04-16 07:36:29', '2', '5']...

Une idée de comment procèder ?

4 réponses

Defy, il y a 11 ans

si ton graphique est une librairie JS tu peut encoder la requette en Json et la récupérer en AJAX pour le rajouter au graphique

Romano83, il y a 11 ans

En fait, ce n'est pas au niveau de l'encodage des données que cela pose problème. C'est surtout au niveau de la structure du tableau où il y a un soucis.
Ce que j'aimerai c'est que lorsqu'il y a une date identique entre plusieurs sous-tableaux, je ne récupère que la date et les "champs" nb de chaque referer comme je l'ai indiqué sur le deuxième exemple ;)

Balbert, il y a 11 ans

Bonjour,

je vous propose ceci =>

function reorganiser(array $informations , $champsVide = 0) { $dates = []; $referers = ['date']; foreach($informations as $information) { if(isset($information['date']) and isset($information['referer'])) { if(!isset($dates[$information['date']])) { $dates[$information['date']] = array(); } $dates[$information['date']][$information['referer']] = $information; $referers[$information['referer']] = $information['referer']; } } $resultat = []; $resultat[] = array_values($referers); foreach($dates as $k => $date) { $t = [$k]; foreach($referers as $referer) { if($referer != 'date') { if(isset($date[$referer])) { $t[] = $date[$referer]['nb']; }else { $t[] = $champsVide; } } } $resultat[] = $t; } return $resultat; }

Usage :

$resultat = reorganiser($informations); var_dump($resultat);

En esperant que cela vous soit utile.

Romano83, il y a 11 ans

Un grand merci balbert !!!
C'est exactement ce que je cherchais à faire ;)