On Fri, 20 Oct 2006 16:04:27 +0900, Dave M G wrote:
> PHP List,
>
> I took a snippet of code right off the php.net site to use trim on all
> the elements of an array.
>
> Theoretically, it should test if the element in an array is in turn
> another array, and break it down to the next level until it gets to a
> string it can use trim on.
>
> This is the code:
>
> public static function trimArray($array)
> {
> if (is_array($array))
> {
> array_walk($array, "trimArray");
> }
> else
> {
> $array = trim($array);
> }
> return $array;
> }
>
> The function exists inside a static class called "Utility" where I keep
> all basic utility functions.
>
> I don't know if it's the fact that it's in a static class that makes a
> difference, but I've tried the following variations on the line with
> array_walk() in it:
>
> array_walk($array, "Utlity::trimArray")
>
> array_map("Utility::trimArray", $array)
>
> array_map("trimArray", $array)
>
> I've even tried accomplishing it with a foreach(), but no matter what I
> do, it doesn't work.
>
> As it walks through the array, it seems to trim a copy of the element in
> the array, trim that, but leave the original array untouched.
>
> What am I missing here?
'pass-by-reference', as mentioned on the array_walk() doc page. Functions
have their own variable scope. If those words mean nothing to you:
http://www.php.net/manual/en/language.variables.scope.php
http://www.php.net/manual/en/language.references.pass.php
Bottom line: the values get changed within the function, but when the
function ends, the value changes are 'lost'.
Ivo
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php