stdClass Object
(
    [INFO] => stdClass Object
        (
            [A] => 1
            [B] => 2
            [C] => 3
            [D] => stdClass Object
                (
                    [AA] => 11
                    [BB] => 22
                    [CC] => 33
                    [CC] => 44
                )
 
        )
 
)
版主有好的思路么

解决方案 »

  1.   

    转化为数组了过后可以用spl中的数组迭代器来遍历,不知道速度会不会快一点
      

  2.   

    不是很明白为什么要有这样的需求,可以这样写$s = '{"A":1,"B":2,"C":3,"D":{"AA":11,"BB":22,"CC":33}}';
    $o = json_decode($s); //模拟一个对象$t = serialize($o);
    $t = preg_replace_callback('/("[A-Z]+")(;.+?;)/', function($r) { return strtolower($r[1]) . $r[2]; }, $t);
    $o = unserialize($t);print_r($o);stdClass Object
    (
        [a] => 1
        [b] => 2
        [c] => 3
        [d] => stdClass Object
            (
                [aa] => 11
                [bb] => 22
                [cc] => 33
            )
    )
    如果真是 json 则可写作$s = '{"A":1,"B":2,"C":3,"D":{"AA":11,"BB":22,"CC":33}}';
    $s = preg_replace_callback('/"[A-Z]+":/', function($r) { return strtolower($r[0]); }, $s);
    print_r(json_decode($s));
    stdClass Object
    (
        [a] => 1
        [b] => 2
        [c] => 3
        [d] => stdClass Object
            (
                [aa] => 11
                [bb] => 22
                [cc] => 33
            ))
      

  3.   

    1.先json_encode把对象转字符串
    2.使用preg_replace_callback 调用 strtolower把 "*": 转为小写,相当于把遍历改成正则替换。
    3.json_decode 把字符串转为对象。
    <?php
    $s = '{"A":1,"B":2,"C":3,"D":{"AA":11,"BB":22,"CC":33}}';
    $obj = json_decode($s);print_r($obj);$str = json_encode($obj);
    $str = preg_replace_callback('/"(.*?)":/', 'tolower', $str);
    $obj = json_decode($str);print_r($obj);function tolower($matches){
        return '"'.strtolower($matches[1]).'":';
    }
    ?>