2013-09-23 2 views
0

J'ai ce tableau:tableau Réorganiser pour Highcharts

array (
    0 => 
    array (
    'banner' => 'banner1', 
    'dayofweek' => '1', 
    'count' => '3', 
), 
    1 => 
    array (
    'banner' => 'banner1', 
    'dayofweek' => '2', 
    'count' => '1', 
), 
    2 => 
    array (
    'banner' => 'banner2', 
    'dayofweek' => '2', 
    'count' => '3', 
) 
) 

je dois l'utiliser dans Highcharts pour obtenir deux vecteurs différents avec le dayofweek comme le jour et le compte en tant que valeur. Voici comment devrait être le tableau Highcharts:

series:[ 
    { 
     name:'banner1', 
     data:[3,1,0,0,0,0,0,] 
    }, 
    { 
     name:'banner2', 
     data:[0,3,0,0,0,0,0,] 
    } 
] 

je dois avoir le tableau de cette façon, je suppose:

array (
    0 => 
    array (
    'banner' => 'banner1', 
    'counts' => '3,1,0,0,0,0,0' 
), 
    1 => 
    array (
    'banner' => 'banner2', 
    'counts' => '0,3,0,0,0,0,0' 
) 

) 

Comment puis-je analyser le tableau pour obtenir le format que j'ai besoin?

+0

Vous obtenez un tableau de tableaux ... en construisant des tableaux internes au lieu de les créer en tableau ... créez un objet et ajoutez ceux des objets au tableau .. – sasi

+0

Désolé, je ne comprends pas ce que vous voulez dire. – PurpleFoxy

+0

Je ne comprends pas très bien quelle sortie vous voulez - pouvez-vous donner un exemple? –

Répondre

1

En fait, ce que vous avez besoin est quelque chose comme ceci:

$initialArray = ...; 
$temp = array(); 
foreach ($initialArray AS $a) { 
    if (!isset($temp[ $a['banner'] ])) { 
     $temp[ $a['banner'] ] = array_fill(0, 7, 0); 
    } 
    $temp[ $a['banner'] ][ $a['dayofweek'] - 1 ] = intval($a['count']); 
} 

$series = array(); 
foreach ($temp AS $banner => $counts) { 
    $obj = new stdClass(); 
    $obj->banner = $banner; 
    $obj->counts = $counts; 
    $series[] = $obj; 
} 

echo json_encode($series); 

Il peut être optimisé pour utiliser moins de mémoire. Mais si vous n'avez pas trop de données (pas des millions de bannières et des centaines de demandes par seconde), alors ce n'est pas nécessaire.

+0

De cette façon, si j'ai un jour sans enregistrements, je reçois 1,1,1 quand il devrait être 1,0,1,1 – PurpleFoxy

+0

Supprimé 'implode'. S'il vous plaît voir l'exemple à: http://phpfiddle.org/lite/code/atq-n40 – Alex

+0

Désolé, je n'ai aucune expérience avec Highcharts. Je viens de voir plusieurs commentaires étranges sur PHP et je voulais l'aider. – Alex

0

Si vous voulez dire quelque chose comme php implode(), essayez:

arrayName.join(delimiter); 

Ou tout simplement tableau de boucle:

var str = ''; 
$.each(arrayName, function(i, num){ 
    str += num + ','; 
}) 

str.slice(-1); 
+0

Je parle de PHP ... – PurpleFoxy