2010-12-12 63 views
2

J'ai un code qui génère le nombre total de messages d'une base de données par heure pour la dernière 10 heures. Maintenant, le problème est que seules les heures avec les messages sont affichés, mais cela ne fonctionnera pas pour moi parce que je veux afficher le tout dans un tableau.Remplir les éléments absents dans un tableau

Exemple du tableau en cours:

array("12"=>"20403", 
      "15"=>"17017", 
      "17"=>"84013"); 

Les touches représentent l'heure dans un format 24. Donc ce dont j'ai besoin est une fonction qui remplit les heures vides avec la valeur 0.

Exemple:

$currenthour=date('H'); // i think it may be based on the latest hour. 

array("11"="0", 
     "12"=>"20403", 
     "13"=>"0", 
     "14"=>"0", 
     "15"=>"17017", 
     "16"=>"0", 
     "17"=>"84013", 
     "18"=>"0", 
     "19"=>"0", 
     "20"=>"0"); 

Merci!

+0

Pourquoi voter contre ?? – Ryan

Répondre

2
foreach(range(0, 23) as $hour) 
    if(!isset($ary[$hour])) 
     $ary[$hour] = 0; 
ksort($ary); 

à remplir quelques heures seulement dernière, vous devrez peut-être quelque chose comme

function last_hours($hour, $cnt) { 
    return $hour < $cnt - 1 ? 
     array_merge(range($hour, 0), range(23, 25 - $cnt + $hour)) : 
     range($hour, $hour - $cnt + 1); 
} 

puis

$now = date("G"); 
$new_array = array(); 
foreach(last_hours($now, 10) as $hour) 
    $new_array[$hour] = isset($ary[$hour]) ? $ary[$hour] : 0; 
+0

Salut, Merci, mais je pense que cela le remplirait avec 24 heures de plage, j'ai juste besoin des 10 dernières heures – Ryan

+0

... Donc comprendre ce que la «gamme» est pour les «10 dernières heures», et que pour la boucle . –

+0

@David: voir mise à jour – user187291

1

Utilisez array_fillOU le faire avec une boucle (en supposant $hours est votre tableau :

$currenthour=date('H'); 
for($i = $currenthour; $i < 23; $i++) 
    if(!isset($hours[$i])) 
     $hours[$i] = 0; 
+0

Ne fonctionne pas :(ceci a raté totalement les heures de commande – Ryan

0

Vous pouvez simplement parcourir le tableau et voir si la valeur de l'index est définie. Comme ceci:

Modifier vos 10 dernières heures:

$currenthour=date('H') 

$beginrange = $currenthour - 10 
if ($beginrange =< 0) 
    $beginrange = 23 + $beginrange 
$endrange = $currenthour 

//set up the for loop 
foreach(range($beginrange, $endrange) as $i) 
    //check if the element is set 
    if(!isset($array[$i])) 
     // set it 
     $array[$i] = 0; 
+0

@ David, ajouté votre exigence de gamme! – shawnjan

+0

Merci, mais si la dernière heure était 00:00, alors ce serait -10? – Ryan