keyBy()不会更改密钥。 Laravel 5.5
我正在与laravel合作,并做出了小小的API。我遇到了keyBy()
问题。 我得到的反应是这样keyBy()不会更改密钥。 Laravel 5.5
"translate": [
0: {"id": 0, "lang": "az" },
1: {"id": 0, "lang": "ru" },
2: {"id": 0, "lang": "en" }
]
而且我想改变这些数组的键是这样的:
"translate": [
"az": {"id": 0, "lang": "az" },
"en": {"id": 0, "lang": "ru" },
"ru": {"id": 0, "lang": "en" }
]
与片段
foreach ($categories as $key => $row) {
if ($row) {
$row->translate = $row->translate->keyBy('lang');
}
}
但结果是一样的。数组键不会更改。我不知道为什么。我只是dd($row->translate)
,我得到了我想要的结果,但最后的结果与之前一样。谢谢!
它应该没有任何问题,我相信问题是在别的地方。看看这个例子:
$object = new stdClass();
$object->translate = collect([
0 => (object) ['id' => 0, 'lang' => 'az'],
1 => (object) ['id' => 0, 'lang' => 'ru'],
2 => (object) ['id' => 0, 'lang' => 'en'],
]);
$object2 = new stdClass();
$object2->translate = collect([
0 => (object) ['id' => 0, 'lang' => 'x'],
1 => (object) ['id' => 0, 'lang' => 'y'],
2 => (object) ['id' => 0, 'lang' => 'z'],
]);
$categories = [$object, $object2];
foreach ($categories as $key => $row) {
if ($row){
$row->translate = $row->translate->keyBy('lang');
}
}
dd($categories);
结果有:
array:2 [▼
0 => {#329 ▼
+"translate": Collection {#346 ▼
#items: array:3 [▼
"az" => {#335 ▼
+"id": 0
+"lang": "az"
}
"ru" => {#337 ▼
+"id": 0
+"lang": "ru"
}
"en" => {#338 ▼
+"id": 0
+"lang": "en"
}
]
}
}
1 => {#340 ▼
+"translate": Collection {#345 ▼
#items: array:3 [▼
"x" => {#341 ▼
+"id": 0
+"lang": "x"
}
"y" => {#342 ▼
+"id": 0
+"lang": "y"
}
"z" => {#343 ▼
+"id": 0
+"lang": "z"
}
]
}
}
]
所以你看结果发生了变化
首先你应该更新你的问题。另外它不会告诉我们你到底做了什么,你如何返回响应等等。 –
我的问题是最新的。当我发送'api'响应时,我只想显示键。目前,我无法得到它。我返回如下的响应:'return response() - > make($ data);'并接收它'HomeController'然后准备好查看。 – rufatZZ
太好了。我们怎么能知道这里的数据?它不包含在你的问题中!在你的问题中,你使用$ categories而不是$ data来做一些事情 –
你必须在新的数组变量中赋值$ row-> translate-> keyBy('lang');'。意味着你必须创建新的数组..你不会改变axisting数组。 – GYaN
你也可以尝试'as&$ row' –
当我使用'as&$ row'时,没有什么改变。 – rufatZZ