2016-12-02 1 views
1

Je crée un script pour surveiller les données de certains VPS, qui est stocké dans une base de données MySQL.Tableau multidimensionnel en PHP avec les clés

$result = mysql_query("SELECT * FROM data"); 
$data = array(); 
while ($row = mysql_fetch_array($result)) { 
    $data[] = array(
      'id' => $row['id'], 
      'hostname' => $row['hostname'], 
      'loadavrg' => $row['load average'] 
    ); 
} 

Je voudrais Separase données par les noms d'hôtes afin que je puisse le lire comme l'exemple suivant:

foreach($data['sitename.com'] as $d) 
    echo $d['loadavrg']; 

J'ai déjà essayé avec le code suivant (juste pour le test), mais n'a pas fonctionné :

$result = mysql_query("SELECT * FROM data WHERE hostname='sitename.com'"); 
$data = array(); 
while ($row = mysql_fetch_array($result)) { 
    $data[] = array(
     'sitename.com' => array(
      'id' => $row['id'], 
      'loadavrg' => $row['load average'] 
     ) 
    ); 
} 

Je manque juste de la bonne façon et la syntaxe pour y parvenir: X

Répondre

3

Chaque el estion doit être ajouté comme sous-tableau de 'sitename.com':

while ($row = mysql_fetch_array($result)) { 
    $data['sitename.com'][] = array(
     'id' => $row['id'], 
     'loadavrg' => $row['load average'] 
    ); 
} 
+0

Euh, je pensais que je l'ai déjà essayé, je devais avoir oublié la deuxième brakets après [ « sitename »] .. Cependant, cela fonctionne! merci :) –

2

Essayez ce,

while ($row = mysql_fetch_array($result)) { 
    $hostname = $row['hostname']; 
    $data[$hostname][] = array(
     'id' => $row['id'], 
     'loadavrg' => $row['load average'] 
    ); 
} 
+1

Que faire si 'sitename.com' a plusieurs entrées? –

+0

@SougataBose Je suppose que l'édition gérera l'exigence exacte –

+0

Oui, c'est encore plus d'aide que je demandais, merci, mais vous manquez [] après [$ hostname] si je ne me trompe pas, c'est ce que j'ai déjà essayé et n'a pas fonctionné parce que je le manquais aussi. –