Création tableau associatif [Résolu]

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 17 nov. 2017 à 20:29 - Dernière réponse : cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention
- 18 nov. 2017 à 12:57
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 
1816Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention

1 réponse

Répondre au sujet
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - Modifié par cs_JMO le 18/11/2017 à 13:01
0
Utile
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.