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

アルゴリズムの質問。解決方法

WBOY
WBOYオリジナル
2016-06-13 11:58:13950ブラウズ

アルゴリズムの質問。

对象原有属性值全部是大写,需求是将对象的属性值全部转化成小写么。 <br />通常思路是  对象转化成数组(遍历转化成小写)再转化成对象  这样的思路很繁琐递归数据源且效率低<br />求高效思路或方法<br />stdClass Object<br />(<br />    [INFO] => stdClass Object<br />        (<br />            [A] => 1<br />            [B] => 2<br />            [C] => 3<br />            [C] => 4<br />            [D] => stdClass Object<br />                (<br />                    [AA] => 11<br />                    [BB] => 22<br />                    [CC] => 33<br />                    [CC] => 44<br />                )<br /><br />        )<br /><br />)<br />

-----解決策---------
オブジェクトは属性を表示できません同じ名前の場合は、
を調整してください-----解決策---------
は、配列 spl で配列イテレータを使用すると、後で走査できるようになります。
-----解決策------ --------------- ----
なぜそのような要件があるのか​​よくわかりませんが、次のように書くことができます
$s = '{"A":1,"B":2,"C":3,"D":{"AA":11,"BB":22,"CC":33}}';<br />$o = json_decode($s); //模拟一个对象<br /><br />$t = serialize($o);<br />$t = preg_replace_callback('/("[A-Z]+")(;.+?;)/', function($r) { return strtolower($r[1]) . $r[2]; }, $t);<br />$o = unserialize($t);<br /><br />print_r($o);
stdClass Object<br />(<br />    [a] => 1<br />    [b] => 2<br />    [c] => 3<br />    [d] => stdClass Object<br />        (<br />            [aa] => 11<br />            [bb] => 22<br />            [cc] => 33<br />        )<br />)<br />


実際に json である場合は、
$s = '{"A":1,"B":2,"C":3,"D":{"AA":11,"BB":22,"CC":33}}';<br />$s = preg_replace_callback('/"[A-Z]+":/', function($r) { return strtolower($r[0]); }, $s);<br />print_r(json_decode($s));<br />
stdClass Object<br />(<br />    [a] => 1<br />    [b] => 2<br />    [c] => 3<br />    [d] => stdClass Object<br />        (<br />            [aa] => 11<br />            [bb] => 22<br />            [cc] => 33<br />        )<br /><br />)<br />

のように書くことができます------解決策-------------- ------
1. まず、オブジェクトを string
2 に json_encode します。preg_replace_callback を使用して strto lower を呼び出し、「*」: を小文字に変換します。これは、トラバーサルを通常の置換に変更するのと同じです。
3.json_decode 文字列をオブジェクトに変換します。

<br /><?php<br />$s = '{"A":1,"B":2,"C":3,"D":{"AA":11,"BB":22,"CC":33}}';<br />$obj = json_decode($s);<br /><br />print_r($obj);<br /><br />$str = json_encode($obj);<br />$str = preg_replace_callback('/"(.*?)":/', 'tolower', $str);<br />$obj = json_decode($str);<br /><br />print_r($obj);<br /><br />function tolower($matches){<br />    return '"'.strtolower($matches[1]).'":';<br />}<br />?><br />

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