перевод ключей массива в Верхний (нижний) регистр

iceman

говнокодер
перевод ключей массива в Верхний (нижний) регистр

нада перевести все ключи массива в Верхний или нижний регистр (если конечно там текст...)
массив может содержать в себе тоже массивы

ламаю голову
PHP:
function arrayKeyUpper(&$array)
{
        foreach ($array as $k=>$v){
            if(is_array($v))
                self::arrayKeyUpper($v);
            $array[strtoupper($k)] = $v;
        }
}
нечего не получается, в мануале искал, ненашел...
 

iceman

говнокодер
результат не тот:
PHP:
Array
(
    [NEWSTITLE] => 321
    [NEWSTEXT] => 123
    [NEWS] => Array
        (
            [xz] => news1
            [zx] => news2
            [xs] => news3
        )

)
а надо поменять, все ключи массивовов и подмассивов
 

akd

dive now, work later
Команда форума
iceman, значит пора включить голову и подумать о рекурсии.
 

iceman

говнокодер
все уже перепробовал...
либо нету результата, либо зацикливание...
 

Гравицапа

elbirret elcno
iceman
foreach + is_array + array_change_key_case + рекурсия = функция в 9 строк
Можно и без array_change_key_case.

-~{}~ 20.03.07 22:32:

По поводу приведённого тобой примера.
Ты пытаешься что-то делать в том же самом массиве...
Попробуй просто формировать новый, с ключами какие хочешь.
 

Angerslave

Новичок
if(is_array($v))
self::arrayKeyUpper($v);

Вот здесь глюк. Передаёшь копию, а нужно само значение.
 

iceman

говнокодер
Angerslave
и правда, спасибо!

PHP:
function arrayKeyUpper(&$array)
{
    foreach($array as &$v){
        if(is_array($v)){
            arrayKeyUpper($v);
        }
    }
    $array = array_change_key_case($array, CASE_UPPER);
}
######
Array
(
    [NEWSTITLE] => 321
    [NEWSTEXT] => 123
    [NEWS] => Array
        (
            [XZ] => news1
            [ZX] => news2
            [XS] => news3
        )

)
 
Сверху