ホームページ  >  記事  >  バックエンド開発  >  アルゴリズムの質問。

アルゴリズムの質問。

WBOY
WBOYオリジナル
2016-06-23 13:56:27851ブラウズ

对象原有属性值全部是大写,需求是将对象的属性值全部转化成小写么。 通常思路是  对象转化成数组(遍历转化成小写)再转化成对象  这样的思路很繁琐递归数据源且效率低求高效思路或方法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        ))
のように書くことができます

本当に 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        ))
のように書くことができます

1. まず json_encode でオブジェクトを文字列に変換します

2. preg_replace_callback を使用して strto lower を呼び出します"*": を小文字に変換します。これは、トラバースを通常の置換に変更するのと同じです。
3.json_decode 文字列をオブジェクトに変換します。

れー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。