Création tableau associatif

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - Modifié le 17 nov. 2017 à 21:06
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 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

1 réponse

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
Modifié le 18 nov. 2017 à 13:01
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
0
Rejoignez-nous