我需要在foreach循环中更改一个PHP对象的键名:
stdClass Object
(
[first-name] => NAME
[last-name] => NAME
[phone-number] => NUMBER
...
)
我需要将foreach中的破折号'-'替换为下划线'_',这样看起来就像这样:
stdClass Object
(
[first_name] => NAME
[last_name] => NAME
[phone_number] => NUMBER
...
)
我找到了这个帖子:PHP - How to rename an object property?,它告诉我如何做,问题是当我在foreach中使用unset()时,它会取消设置所有的键,而不仅仅是我希望它取消设置的键。
下面是我的代码:
foreach ($customer as $key => $value) {
$key2 = str_replace('-', '_', $key);
$customer->$key2 = $customer->$key;
unset($customer->$key);
}
返回一个空对象:
stdClass Object
(
)
如何在不影响新关键点的情况下取消设置原始关键点?
2条答案
按热度按时间vshtjzan1#
有一个简单的技巧,你可以做一般,这是只做的操作,如果有一个变化:
你只是什么也不做,如果操作已经做了(由结果)。
在
foreach
中,这可以通过使用continue
关键字和反向比较来进一步“调整”:但最终你只不想删除which equals to always set(如果你先执行
unset
,然后在克隆上迭代,它就可以工作):所以选择你的武器,甚至有更多的方法来剥这只猫的皮,这只是为了灵感。在一天结束时,操作的顺序(添加,删除等)是“关键”点。
所有的examples on 3v4l.org。
taor4pac2#
你的代码看起来似乎可以工作,但是在你循环通过的对象上工作是一个坏主意。解决方案是get_object_vars(),它可以在你循环之前获得属性:
请参阅:https://3v4l.org/sfZq3