From:             z_rules55 at hotmail dot com
Operating system: WinXP
PHP version:      5.1.6
PHP Bug Type:     Feature/Change Request
Bug description:  How about an array_key_walk_recursive() function?

Description:
------------
While working recently on a project that involves JSON, I saw that it
might be necessary to make sure that a an array's keys are in utf-8
encoding for when I pass it to the JSON encoder, since JSON expects stuff
to be in utf-8. One possible way to do this with PHP's existing array
functions is with array_combine(), and converting all the elements in the
keys array to utf-8 before combining it with the elements array, but this
seems like it could become more tedious with nested arrays. I tried using
foreach($array as &$key => $val) to convert the key's encoding in each
iteration, but got an error saying "Fatal error: Key element cannot be a
reference". So I wrote my own function (included below).

Why isn't there an array_key_walk_recursive() function, or something of
the kind? A function that would let you apply a callback to all keys in an
array. Or, let you use foreach with a referenced key as I mentioned.

Reproduce code:
---------------
<?php
function array_convert_key_encoding($array) {
    $encoded_array = array();
    foreach($array as $key => $val) {
        if(is_string($key) && is_array($val)) {
            $encoded_array[utf8_encode($key)] =
array_convert_key_encoding($val);
        }
        else if(is_string($key)) {
            $encoded_array[utf8_encode($key)] = $val;
        }
        else {
            $encoded_array[$key] = $val;
        }
    }
    return $encoded_array;
}
?>


-- 
Edit bug report at http://bugs.php.net/?id=38684&edit=1
-- 
Try a CVS snapshot (PHP 4.4): 
http://bugs.php.net/fix.php?id=38684&r=trysnapshot44
Try a CVS snapshot (PHP 5.2): 
http://bugs.php.net/fix.php?id=38684&r=trysnapshot52
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=38684&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=38684&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=38684&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=38684&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=38684&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=38684&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=38684&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=38684&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=38684&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=38684&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=38684&r=globals
PHP 3 support discontinued:   http://bugs.php.net/fix.php?id=38684&r=php3
Daylight Savings:             http://bugs.php.net/fix.php?id=38684&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=38684&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=38684&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=38684&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=38684&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=38684&r=mysqlcfg

Reply via email to