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

4
我有一个对象数组,需要转换成键值对,我的代码是:
我有一个名为setting.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'],
              ]
}

并控制器为:

SettingController.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;
}

我收到了以下错误:
尝试获取非对象的属性“code”时发生ErrorException(E_NOTICE)。
我做错了什么,怎样才能纠正这个问题?

Laravel内置了将对象转换为数组的方法,只需使用$setting->currency_info()->toArray();即可。 - Saad Suri
这个不起作用。 - Prakash Poudel
3个回答

9
由于您要迭代的数据是一个数组(来自对象),所以符号应该是“...”
$result[$currency['code']] = $currency['name'];

如果你想要一个更简短的版本(取决于PHP的版本),可以使用array_column()函数...

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

$result[$currency['code']] = $currency['name']; 运行良好,感谢您的回答。 - Prakash Poudel
1
这是最佳答案。 - Prakash Poudel
有时候人们会点踩而不留下反馈,这很让人烦恼。不过这只是你不幸要习惯的事情。 - Nigel Ren

2
foreach ($currency_info as $currency) {
    $result[$currency['code']] = $currency['name'];
}

2

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接