我有一个PHP对象,需要在Foreach循环中更改其键名称:

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
(
)

如何在不影响新关键点的情况下取消设置原始关键点?

推荐答案

一般来说,有一个简单的技巧可以做到,那就是只有在有变化的情况下才执行操作:

    $key2 = str_replace('-', '_', $key);
    if ($key2 !== $key) {
        $customer->$key2 = $customer->$key;            
        unset($customer->$key);
    }

如果操作已经完成(根据结果),则什么也不做.

foreach范围内,可以通过使用关键字continue并颠倒比较来进一步"调整":

foreach ($customer as $key => $value) {
    $key2 = str_replace('-', '_', $key);
    if ($key2 === $key) {
        continue; // nothing to do
    }
    $customer->$key2 = $customer->$key;            
    unset($customer->$key);
}

但在一天结束时,您只想删除等于Always Set的值(如果您首先设置unset并在克隆上迭代,则此方法有效):

foreach (clone $customer as $key => $value) {
    $key2 = str_replace('-', '_', $key);
    unset($customer->$key);
    $customer->$key2 = $value;
}

所以 Select 你的武器,还有更多的方法来剥这只cat 的皮,这只是为了灵感.在一天结束时,操作(添加、删除等)的顺序是"关键"点.

都是examples on 3v4l.org美元.

Php相关问答推荐

我如何知道BaseController中当前运行的是哪个控制器?

有没有办法为整个PHP应用程序启用严格类型

WooCommerce-在选定类别中每消费X个金额即可添加免费礼物

PHP根据特定索引值从中删除子数组

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

更改特定产品标签的 Woocommerce 产品名称

如何在 apache Laragon - laravel 10 中允许方法 DELETE?

使用 PHP,我可以将 foreach 语句放入瞬态中吗?

wp_insert_post() 和 WordPress 中查询字符串的多个帖子

Docker-用于部署的 PHP 应用程序映像无法在本地运行

在 vue 自定义渲染器中访问变量

PHP文件如何从CSS执行

在 Symfony 测试中何时使用 TestCase 而不是 KernelTestCase

Laravel:ArgumentCountError: 函数 App\Mail 的参数太少

服务器遇到内部错误或配置错误,无法完成您的请求

带有 nginx 的 Symfony 不提供 .js 和 .css 文件

PHP 将数组值插入到 csv 列

自定义错误页面不适用于 Apache 和 nginx 设置的 .htaccess

转发和非转发呼叫 - 后期静态绑定

我正在使用 Baryryvdh/laravel-snappy 从 HTML 导出 PDF 它正在工作但缩小了 pdf 文件