array_walk_recursive in PHP 4 - PHP algemeen - PHP scripts - PHPhulp
array_walk_recursive in PHP 4
Door Henk , 16 jaar geleden, 2.077x bekeken
Deze functie doet hetzelfde als array_walk_recursive in PHP 5 doet. Omdat ik op een bepaalde server nog geen PHP 5 heb, en omdat ik deze functie wel nodig heb, heb ik hem geschreven.
Misschien kunnen jullie hem ooit gebruiken.
Op lijn 2 zie je hoe ik de functie open. Eerst de naam van de functie, dan 2 argumenten, en 1 optioneel argument.De eerste is de array die je wilt doorlopen. We zetten de reference operator & ervoor. Dit doen we zodat de meegegeven array ook echt aangepast kan worden. Normaal kun je de variabele alleen binnen de functie aanpassen, maar doordat de reference operator is meegegeven worden veranderingen ook doorgevoerd in de rest van je script, en niet alleen binnen je functie.De tweede is een string met de functie die over elk deel ind e array heen gehaald moet worden.De derde maar optionele parameter is een mixed variabele die mee kan worden gegeven als parameter voor de callbackfunctie. Als je hiervoor niks invult worden er ook geen parameters meegegeven met de callbackfuncie.
In de functie zelf beginnen we maar met de array doorlopen. Dit doen we met een foreach loop. Voor elk deel van de array kijken we of dit een array is of niet. Als het geen array is, dan controleren we of $mUserArguments null is. Zoja, dan geven we $mUserArguments niet mee als parameter, en zonee dan geven we deze variabele wel mee.Als het wel een array is, dan moet dat deel van de array ook weer doorlopen worden. Dat deel van de array is dan $aArray [ $sKey ]. We gebruiken dus array_walk_recrsive ( $aArray [ $sKey] , $sCallbackfunctie [ , $mUserArguments ] ); (we gebruiken weer dezelfde controle voor $mUserArguments)
Voorbeeld: http://www.4stip.nl/overig/array_walk_recursive/
arraywalkrecursive-in-php-4
Er zijn 11 reacties op 'Arraywalkrecursive in php 4'
Nuttige bijdrage! Misschien handig om de functie en je voorbeeld apart te plaatsen?
Bedankt! Ik heb je tip ook doorgevoerd :)
Hey, leuk. Ik kwam hem laatst ook tegen, op de functiebeschrijving van php.net van array_walk_recursive. Deze functie heeft iets meer beveiliging ingebouwd. Ik post hem hier maar.
Ik heb tevens een copy van de functie gemaakt die de callback voedt met alle keys van bovenliggende arrays (soms wil je dat weten).
function array_walk_recursive_allkeys(&$input, $funcname, $userdata = "", $prevkeys = array()) {
$passArr = $prevkeys;
$passArr[] = $key;
array_walk_recursive_allkeys($input[$key], $funcname, $userdata, $passArr);
$funcname($value, $prevkeys, $userdata);
$funcname($value, $prevkeys);
Ik heb ook gedacht aan dit soort controles, maar heb ze er toch maar uit gelaten.
Bovendien vind ik jouw manier toch niet helemaal fijn: als de functie nu false returnt, dan weet je niet wat er fout is. Als je PHP gewoon de errors laat zien van "Fatal error: Call to undefined function: ...() in ..." of "Warning: Invalid argument supplied for foreach() in ..." dan zie je meteen wat fout is. Toch is dat misschien toch iets te lomp inderdaad.
En dit stukje code vind ik een beetje raar / nutteloos / snap ik niet:
Wat je doet: Als de oude waarde niet gelijk is aan de nieuwe waarde, of als de oude sleutel niet gelijk is aan de nieuwe sleutel, dan pas vervangen we de oude waarde in de $input-array met de nieuwe. -Waarom vervang je hem niet gewoon, zonder die controle? Dat snap ik niet.
De extra parameter $userarguments is overigens wel nuttig :-) Die zal ik erbij zetten.
De voorgaande sleutels meegeven lijkt mij nu niet nuttig, maar kan natuurlijk nuttig zijn in jouw situatie. Dat is een extra en die kan je zelf inbouwen in de functie.
Wat vinden jullie? Zal ik de controles of de functie wel aanroepbaar is en of de input wel een array is erbij zetten? En zoja, wat zal ik doen als de de input niet door de controles komt?
Ik ben in principe van mening dat elke provider enigszins moet overstappen naar PHP5 op zich. Daarom zie ik het nu van dit script deze functie redelijk niet in.