算法题。

php中文网
发布: 2016-06-23 13:56:27
原创
999人浏览过

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

算家云
算家云

高效、便捷的人工智能算力服务平台

算家云 37
查看详情 算家云

回复讨论(解决方案)

对象不可能出现同名属性,请调整一下

对象不可能出现同名属性,请调整一下

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 调用 strtolower把 "*": 转为小写,相当于把遍历改成正则替换。
3.json_decode 把字符串转为对象。

<?php$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]).'":';}?>
登录后复制

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号