Bien le bonsoir

Alors voilà, cette fois ci on m'a confié de faire un outil d'extraction de donnée dedupliqué en php (ou tout autre .net).
Donc bon comme un con j'ai direct codé le bousin et je me suis fait remonté les bretelle car je n'avais pas fait de doc de spec ou je ne sais quoi en presentant tout fiers les premiers résultats.
Et finalement ce truc inutile va me servir, car ce que j'ai fait est lent, très lent, les données que je traite se mesurent en centaine de mega octet et j'aimerais vraiment l'optimiser car attendre 15 min pour voir un fatal error memory insufficient c'est boaf quoi !

Ainsi ce que j'ai fait est limité par ma conception des choses, n'ayant pas d'oreille à qui confier mes problèmes d'algorithme dans mon entourage je me confie ici !

J'aimerais savoir ce que vous en pensez et si vous avez de bonnes idées pour améliorer la vitesse d'exécution des choses !

Voici donc un schéma fait avec mes ptites mains qui apparait dans le doc :


Ainsi que les fonctions utilisées : (pour faciliter les tests et réduire la taille du code j'ai fixé certains paramètres )
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
set_time_limit(0);
ini_set("memory_limit","120000000000000000000000M");
 
function parse_csv($csv_name, $separator)
{
	$csv_array = array();
	$row = 0;		
	$handle = fopen($csv_name, "r");	
	while (($data = fgetcsv($handle, 10000, $separator)) !== FALSE)
		if (count($data)) // on ne prends pas les lignes vides
			$csv_array[$row++] = $data;					        			
	fclose($handle);
 
	return $csv_array;
}
function invert_array ($array)
{						 
	$inverted_array = array();
	for ($i = 0; $i < count($array[0]); $i++)
	{
		for ($j = 0; $j < count($array); $j++)
			$inverted_array[$i][$j] = $array[$j][$i];
	}
	return $inverted_array;		
}
 
function search_val_array($array, $value)
{
	$result = array(); $result[0] = array(); $result[1] = array();
	$row = 0;
	for($i=0; $i < count($array[0]); $i++)
		if(strpos($array[0][$i], $value) !== FALSE && isset($array[1][$i]) && $array[1][$i] != "")
			$result[1][$row++] = $array[1][$i];
	return $result;	
}
 
function deduplicate ($array)//, $column)
{
	$result = array(); $result[0] = array(); $result[1] = array();
	$row = 0;	
	for ($i=0; $i < count($array[1]); $i++)
	{
		for ($j = 0; $j < count($result[1]); $j++)
			if ($array[1][$i] == $result[1][$j])
				break;
		if ($j == count($result[1]))
			$result[1][$row++] = $array[1][$i];
	}
	return $result;							
}
 
function deduplicate_fusion ($array1, $array2)
{
	$result = $array1;
	$row = count($array1[1]);	
	for ($i=0; $i < count($array2[1]); $i++)
	{
		for ($j = 0; $j < count($result[1]); $j++)
			if ($array2[1][$i] == $result[1][$j])
				break;
		if ($j == count($result[1]))
			$result[1][$row++] = $array2[1][$i];
	}
	return $result;			
}


Merci infiniment d'avance pour toute vos contributions !