时间:2021-07-01 10:21:17 帮助过:32人阅读
对象原有属性值全部是大写,需求是将对象的属性值全部转化成小写么。
通常思路是 对象转化成数组(遍历转化成小写)再转化成对象 这样的思路很繁琐递归数据源且效率低
求高效思路或方法
stdClass Object
(
[INFO] => stdClass Object
(
[A] => 1
[B] => 2
[C] => 3
[C] => 4
[D] => stdClass Object
(
[AA] => 11
[BB] => 22
[CC] => 33
[CC] => 44
)
)
)
$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
)
)
$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
)
)
$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]).'":';
}
?>