您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

算法题该怎么解决

2024/3/30 2:38:41发布16次查看
算法题。
对象原有属性值全部是大写,需求是将对象的属性值全部转化成小写么。
通常思路是 对象转化成数组(遍历转化成小写)再转化成对象 这样的思路很繁琐递归数据源且效率低
求高效思路或方法
stdclass object
(
[info] => stdclass object
(
[a] => 1
[b] => 2
[c] => 3
[c] => 4
[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 调用 strtolower把 *: 转为小写,相当于把遍历改成正则替换。
3.json_decode 把字符串转为对象。

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product