"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Verwijderd
Je doorzoekt een associatieve array met een numerieke index. Uit mijn hoofd zou je dit moeten doen
PHP:
Het kan korter, maar ter preventie van een grondige layoutfuckup heb ik die accolades neergezet. Je kan natuurlijk ook de functie aanpassen om recursief in zichzelf te zoeken (meerdemensionale associatieve arrays). Succes met je gepiel.
1
2
3
4
5
6
7
8
| function in_assoc_array($needle,$array) { foreach($array as $key => $value) { if($value==$needle) return true; } return false; } |
[ Voor 1% gewijzigd door Verwijderd op 14-12-2004 22:44 . Reden: Stomme spatiebalk, bedankt Maarten21 :) ]
Ga gewoon eens stapje voor stapje door je code om te kijken wat er gebeurt. Bedenk daarbij dat zodra je een return doet je de functie uitspringt. Wat zou er gebeuren zodra het allereerste element niet het gezochte element is? Komt hij uberhaupt bij het controleren van het tweede element?
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Wat jeroen_paul zegt is bijna goed...
alleen moet het foreach zijn
dus <code>foreach ($array as $key => $value)</code>
In jouw geval bestaat $my_array[0] en $my_array[1] niet.
foreach gaat alle _keys_ af, dus in jouw geval 'link' en 'title'
dus $my_array['link'] en $my_array['title']
alleen moet het foreach zijn
dus <code>foreach ($array as $key => $value)</code>
In jouw geval bestaat $my_array[0] en $my_array[1] niet.
foreach gaat alle _keys_ af, dus in jouw geval 'link' en 'title'
dus $my_array['link'] en $my_array['title']
Zoals Janoz al zegt: je functie returnt al als de eerste index geen "het" bevat, dus verder dan de eerste index komt hij heel niet.
Dit zou echter wel moeten werken. Elke index wordt nu nagelopen, en als het klopt returnt ie de index (en stopt de functie dus ook) , als er geen enkele klopt returnt ie false.
Edit: @ Jeroen Paul:
De functie van de TS kijkt of de value bestaat in een array in een array, jouw functie doet hetzelfde als in_array();
Deze versie zou ik zelf gebruiken:
Dit zou echter wel moeten werken. Elke index wordt nu nagelopen, en als het klopt returnt ie de index (en stopt de functie dus ook) , als er geen enkele klopt returnt ie false.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <? $my_array = array( array('link'=>'dit', 'title'=>'Dittes'), array('link'=>'dat', 'title'=>'Dattes'), array('link'=>'het', 'title'=>'Hettes') ); function in_assoc_array($needle, $array) { for ($i = 0; $i <= count($array); $i++) { if (in_array($needle, $array[$i])) return $i; } return false; } echo in_assoc_array('het', $my_array); ?> |
Edit: @ Jeroen Paul:
De functie van de TS kijkt of de value bestaat in een array in een array, jouw functie doet hetzelfde als in_array();
Deze versie zou ik zelf gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <? function in_assoc_array($needle, $array) { foreach($array as $key => $value) { if (in_array($needle, $value)) return $key; } return false; } echo in_assoc_array('het', $my_array); ?> |
[ Voor 46% gewijzigd door Rostvertol-Mil op 14-12-2004 22:49 ]
dot.blaat