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


Balbert
Réponse acceptée

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.

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
Auteur

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

Romano83
Auteur

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