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
Partager