对象原有属性值全部是大写,需求是将对象的属性值全部转化成小写么。 通常思路是 对象转化成数组(遍历转化成小写)再转化成对象 这样的思路很繁琐递归数据源且效率低求高效思路或方法stdClass Object( [INFO] => stdClass Object ( [A] => 1 [B] => 2 [C] => 3 [C] => 4 [D] => stdClass Object ( [AA] => 11 [BB] => 22 [CC] => 33 [CC] => 44 ) ))
オブジェクトが同じ属性を持つことは不可能です、調整してください
オブジェクトが同じ属性を持つことは不可能です、調整してください
stdClass Object( [INFO] => stdClass Object ( [A] => 1 [B] => 2 [C] => 3 [D] => stdClass Object ( [AA] => 11 [BB] => 22 [CC] => 33 [CC] => 44 ) ) )
配列に変換した後、spl で配列反復子を使用してそれを走査することができます。それが高速になるかどうかはわかりません
理由はよくわかりません。
$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 ))のように書くことができます 1. まず json_encode でオブジェクトを文字列に変換します
2. preg_replace_callback を使用して strto lower を呼び出します"*": を小文字に変換します。これは、トラバースを通常の置換に変更するのと同じです。
3.json_decode 文字列をオブジェクトに変換します。
れー