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

Posted

技术标签:

【中文标题】如何使用 php/laravel 在现有数组对象中插入键值对?【英文标题】:How to insert key value pair in an existing array object using php/laravel? 【发布时间】:2021-11-15 04:38:54 【问题描述】:

我的代码:

$finalArray = json_encode($loanTypeCount);

输出:

["name":"Salary","y":"6","name":"Emergency","y":"1"]

期望的输出:

["name":"Salary","y":6, "selected": true,"name":"Emergency","y":1, "selected": true]

插入"selected": true 键值对。在 laravel/php 中的实现方式是什么?

【问题讨论】:

解码,向数组/对象添加值,重新编码。或者在编码之前先做。 【参考方案1】:

如果是 Collection 实例,可以使用map()

$loanTypeCount->map(function($loan) 
    $loan->selected = true;
    return $loan;
);

【讨论】:

如果您想要的结果是 JSON 编码的字符串,以 ->toJson() 结尾。 @Dan 他从(主要)一个集合开始,并在他的问题中对其进行 json_encode。 如果我想将数据库中的值分配给 $loan->selected 怎么办?我想要一些东西 $loan->selected = $loan->loan_type;我已经尝试过了,但它返回 null。 @Eli 它应该可以工作,除非 $loan->loan_type 在您的数据库中为空【参考方案2】:

基于N69S' solution,这里的示例以 JSON 编码字符串而不是集合实例开始并以修改后的实例结束。

$json = '["name":"Salary","y":"6","name":"Emergency","y":"1"]';

$arr = collect(json_decode($json, true))
    ->map(function ($item, $key) 
        $item['selected'] = true;

        return $item;
    )
    ->toJson();

【讨论】:

如果我想将数据库中的值分配给 $loan->selected 怎么办?我想要一些东西 $loan->selected = $loan->loan_type;我已经尝试过了,但它返回 null。 – 伊莱【参考方案3】:

纯php的简单解决方案:

$json = '["name":"Salary","y":"6","name":"Emergency","y":"1"]';

$obj=json_decode($json);
$obj[0]->selected = true;
$obj[1]->selected = true;

$newJson = json_encode($obj);
//["name":"Salary","y":"6","selected":true,"name":"Emergency","y":"1","selected":true]

也可以使用 foreach:

$json = '["name":"Salary","y":"6","name":"Emergency","y":"1"]';

foreach($obj=json_decode($json) as $key => $item)
  $obj[$key]->selected = true;


$newJson = json_encode($obj);
//["name":"Salary","y":"6","selected":true,"name":"Emergency","y":"1","selected":true]

【讨论】:

以上是关于如何使用 php/laravel 在现有数组对象中插入键值对?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP/Laravel 返回 Json 数据数组?

如何使用猫鼬更新数组中的现有对象

PHP / Laravel - 更新 JSON 对象的值

如何在php laravel中将数组键转换为随机字符串

将新属性添加到另一个数组中的现有对象数组

如何检查数据库PHP Laravel中存在的复选框数组值?