Création tableau associatif [Résolu]

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Bonsoir le Forum,

Sur un Redhat, je dispose du fichier "hosts.cfg" contenant
define host{
 host_name    servertoto
        ....
}
define host{
 host_name    servertiti
        ....
}

Pour récupérer tous les "host_name", j'effectue
<?php 
	date_default_timezone_set('Europe/Paris');
	print "<br> Test en cours - jeanmarc - " . date("d/m/Y H:i:s") . "<br><br>";

	// Déclaration des variables
	$roothost = "./conf.local/";
	$filehosts = "hosts.cfg";
	$fileservices = "services.cfg";

	// Tableau contenant le fichier hosts.cfg
	// file — Lit le fichier et renvoie le résultat dans un tableau
	$lines_host = file($roothost . $filehosts);

	// Récupération via une RegEx des lignes contenant le nom des hosts
	// preg_grep — Retourne un tableau avec les résultats de la recherche
	$hosts = preg_grep("/^\s*host_name.*/", $lines_host);
	
	// Appel fonction "hostname" pour isoler le nom du host via array_map
	// array_map — Applique une fonction sur les éléments d'un tableau
	$hosts= array_map("hostname", $hosts);

	// Enumération des hosts pour debug
	foreach ($hosts as $value) {
		echo "host : $value<br />\n";
	}

	// Fonctions
	// 
	// Récupération nom du host avec omit des espaces
	// preg_replace — Rechercher et remplacer par expression rationnelle standard
	function hostname($line) {
		$tmp = preg_replace("/^\s*host_name\s*/", "", $line);
		return (preg_replace("/\s*$/", "", $tmp));
	}
?>


Je récupère correctement le nom de tous les hosts.

Ici, je bloque !!!
Je dispose du fichier "services.cfg" contenant
define service{
 host_name    servertoto
 service_description  /
 ...
}

define service{
 host_name    servertiti
 service_description  /
 ...
}

define service{
 host_name    servertoto
 service_description  /data
 ...
}

define service{
 host_name    servertiti
 service_description  /var
 ...
}
...


Avec le fichier "services", quelle fonction faut-il utiliser pour créer un tableau associatif (dans d'autres langages dictionary) pour récupérer les "host_name" et "service_description" associés ???

Merci de vos suggestions et de votre indulgence (new en php) !!!

jean-marc
Afficher la suite 

Votre réponse

1 réponse

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
0
Merci
Bonjour le forum,

Je suis parvenu au résultat escompté avec
 // Tableau contenant le fichier services.cfg
 // file — Lit le fichier et renvoie le résultat dans un tableau
 $lines_service = file($roothost . $fileservices); 
 
 // Récupération host_name et service_description
 foreach ($lines_service as $value) {
  if (strpos($value, 'host_name') !== false) {
   $servicehost = hostname($value);
  }
  
  if (strpos($value, 'service_description') !== false) {
   $servicename = hostname($value);
   $hostservice[]= array('host' => $servicehost, 'service' => $servicename);
  }
 }  
 
 sort($hostservice);
 echo '<br><pre>';
 print_r($hostservice);
 echo '</pre>';

// Fonctions
// 
// Récupération nom du host (ou service) avec omit des espaces
// preg_replace — Rechercher et remplacer par expression rationnelle standard
function hostname($line) {
	if (strpos($line, 'host_name') !== false) {
		$tmp = preg_replace("/^\s*host_name\s*/", "", $line);
	} else if (strpos($line, 'service_description') !== false) {
		$tmp = preg_replace("/^\s*service_description\s*/", "", $line);
	}
	return (preg_replace("/\s*$/", "", $tmp));
}


Est-ce la bonne méthode en php ???

jean-marc
Commenter la réponse de cs_JMO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.