Bonjour,

Savez vous s'il existe une fonction ou comment optimiser une recherche récursive dans 3 fichiers ?

J'ai un code qui fonctionne mais sur de gros fichier je vais avoir un timeout.

L'algo est le suivant :

Je prend mon fichier 1 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$AssetExtractFilename = $RootPath."\Datas\Extract\ASSET.txt";
Je le lis, ligne par ligne avec ma fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$champs_array = ReadExtract($AssetExtractFilename);
J'extrais le champs 8 qui est le nom de mon serveur :

Ensuite je vais voir dans mon fichier 2 si mon serveur (extrait en champs 8, fichier1) existe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$champs_array = ReadExtract($SCCMExtractFilename);
Et enfin je vais voir dans mon fichier 3 si mon serveur (extrait en champs 8, fichier1) existe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$champs_array = ReadExtract($CASExtractFilename);
A la fin je fait un tableau : fichier 1 existe oui/non, fichier 2 existe oui/non, , fichier 3 existe oui/non.

Ce qui donne ça :

FONCTION :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
// FONCTION : lecture du fichier et création d'un array multi-dimension
function ReadtExtract($Filename)
{
	$champs_array = array();
	$lines_array = file($Filename); 
	// on supprime la 1ère ligne (celle contenant les titres)
	unset($lines_array[0]);
	// on sépare ensuite les éléments de chaque ligne
	foreach($lines_array as $line)
       {
		//on enlève les " et espaces (surtout à la fin de la ligne)
		$line = trim(str_replace('"', '', $line));
		//on coupe a chaque ;
		$champs_array[] = explode(";", $line);
	}
	return $champs_array;
}
PARCOURS DES FICHIERS (Pour l'exemple j'ai mis que 2 fichiers) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
$champs_array = ReadExtract($AssetExtractFilename);
 
foreach($champs_array as $champsASSET)
{
	if (!empty($champsASSET[8])) 
	{
		$MaRecherche = $champsASSET[8];
		$champs_array = ReadExtract($SCCMExtractFilename);
		foreach($champs_array as $champsSCCM)
		{
			if (!empty($champsSCCM[1])) 
			{
				if (strcasecmp(trim($MaRecherche),trim($champsSCCM[1])) == 0)
				{
					echo $champsSCCM[1]."<br>";
				}
 
			}
		}
 
	}
}
Merci d'avance pour votre aide précieuse.