如何在php中将对象数组转换为键值对

Posted

技术标签:

【中文标题】如何在php中将对象数组转换为键值对【英文标题】:how to convert array of objects to key value pairs in php 【发布时间】:2019-01-08 16:08:04 【问题描述】:

我有一个对象数组,我需要转换成键值对,我的代码是

我有一个模型: 模型设置.php

public function currency_info()
     $currency_info = [
                ['code' => 'AED', 'name' => 'United Arab Emirates Dirham'],
                ['code' => 'ANG', 'name' => 'NL Antillian Guilder'],
                ['code' => 'ARS', 'name' => 'Argentine Peso'],
                ['code' => 'AUD', 'name' => 'Australian Dollar'],
                ['code' => 'BRL', 'name' => 'Brazilian Real'],
              ]

控制器为:

设置控制器.php

public function index()

        $setting = new Setting();
        $currency_list = $setting->currency_info();

        $result = [];
        foreach ($currency_list as $currency) 
            $result[$currency->code] = $currency->name;
        

        return $result;

我收到以下错误:

ErrorException (E_NOTICE) Trying to get property 'code' of non-object

我在哪里做错了,我该如何纠正?

【问题讨论】:

Laravel 内置了转换为数组的方法,只需使用$setting->currency_info()->toArray(); 这不起作用 【参考方案1】:

由于您尝试迭代的数据是一个数组(来自一个对象),因此符号应该是......

$result[$currency['code']] = $currency['name'];

或者如果您想要更短的版本(取决于 PHP 的版本),请使用 array_column()...

$result = array_column($currency_list, 'name', 'code');

【讨论】:

$result[$currency['code']] = $currency['name'];效果很好,谢谢你的回答 这是最好的答案 这有时很烦人,因为人们会投反对票而不留下反馈。不幸的是,这只是你必须习惯的事情。【参考方案2】:
foreach ($currency_info as $currency) 
    $result[$currency['code']] = $currency['name'];

【讨论】:

【参考方案3】:

currency_info函数返回数组,所以把它当作数组。您正在使用$currency->code 访问数组中的code 键,请改用$currency["code"]

public function index() 
    $setting = new Setting();
    $currency_list = $setting->currency_info();

    $result = [];
    foreach ($currency_list as $currency) 
        $result[$currency["code"]] = $currency["name"];
    
    return $result;

【讨论】:

以上是关于如何在php中将对象数组转换为键值对的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将匿名类型转换为键/值数组?

如何使用 php/laravel 在现有数组对象中插入键值对?

如何在 php 中将数组值作为键值对插入到数据库表中

将NSString转换为键值对

springmvc: JSON

Json数组方法随机函数数组去重