Ami(e)s développeurs(euses) bonjour,

Je suis confronté à une difficulté pour faire de la recherche dans un tableau associatif à deux dimensions. En effet j'ai un tableau d'objets et je voudrais extraire tous les objets dont la clé "A" est égale à '8' (c'est un exemple bien entendu).

J'ai essayé d'utiliser une fonction récupérée sur php.net ( http://fr.php.net/array_search ) mais elle ne convient pas aux tableaux associatifs. J'ai donc bidouillé une petite fonction mais je pense qu'elle peut être optimisée; telle quelle elle doit consommer beaucoup de ressources si mon tableau est conséquent.

Pour être plus clair voici un exemple:

Code php : 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
66
67
68
69
70
71
72
73
74
<?php
	$meule = array(
					array( "id" => '1001', "A" => '8', "B" => '3'),
					array( "id" => '1002', "A" => '8', "B" => '9', "C" => '5', "D" => '1'),
					array( "id" => '1003', "A" => '1', "B" => '7'),
					array( "id" => '1004', "A" => '8', "B" => '5', "C" => '7'),
					array( "id" => '1005', "A" => '8'),
					array( "id" => '1006', "A" => '3', "B" => '7')
					);

	function recursive_array_search($champ, $valeur, $tableau) 
	{
		$rs = array();
		foreach($tableau as $obj) 
		{
			foreach($obj as $key => $val)
			{
				if(($key == $champ) && ($val == $valeur))
				{
					$rs[] = $obj;
				}
			}
		}
		return $rs;
	}

	var_dump(recursive_array_search("A", '8', $meule));
?>

/* 
	RÉSULTATS pour un triage suivant les critères 'A == 8' :
	array(4) {
		[0]=>
			array(3) {
				["id"]=>
				string(4) "1001"
				["A"]=>
				string(1) "8"
				["B"]=>
				string(1) "3"
			}
		[1]=>
			array(5) {
				["id"]=>
				string(4) "1002"
				["A"]=>
				string(1) "8"
				["B"]=>
				string(1) "9"
				["C"]=>
				string(1) "5"
				["D"]=>
				string(1) "1"
			}
		[2]=>
			array(4) {
				["id"]=>
				string(4) "1004"
				["A"]=>
				string(1) "8"
				["B"]=>
				string(1) "5"
				["C"]=>
				string(1) "7"
			}
		[3]=>
			array(2) {
				["id"]=>
				string(4) "1005"
				["A"]=>
				string(1) "8"
			}
	}
*/


Qu'en pensez vous, puis-je rendre ma fonction plus rapide et moins gourmande?

Merci