keyBy() 不会更改键。拉拉维尔 5.5
Posted
技术标签:
【中文标题】keyBy() 不会更改键。拉拉维尔 5.5【英文标题】:keyBy() doesn't change keys. Laravel 5.5 【发布时间】:2018-05-31 17:19:59 【问题描述】:我正在使用 laravel 并制作了小 api。我对keyBy()
有疑问。
我得到这样的回应
"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"
]
用那个sn-p
foreach ($categories as $key => $row)
if ($row)
$row->translate = $row->translate->keyBy('lang');
但是结果是一样的。数组键不会改变。我不知道为什么。我只是dd($row->translate)
,我得到了我想要的结果,但最后的结果和以前一样。谢谢!
【问题讨论】:
你必须在一个新的数组变量中分配`$row->translate->keyBy('lang');`。意味着您必须创建新阵列。您不会更改轴阵列。 你也可以试试as &$row
当我使用as &$row
时没有任何改变。
【参考方案1】:
它应该可以正常工作,我相信问题出在其他地方。看看这个例子:
$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"
]
]
如您所见,结果发生了变化
【讨论】:
这个翻译是我的json
对象的主要部分。我必须将它分开以在集合中使用并放回去?
对不起,我不明白你的意思,但正如我向你展示的那样,如果你使用集合,它应该可以正常工作,将我的代码与你的代码进行比较,并确保验证有效结果
是的,我正在努力。 :) 感谢您的回复 :)
我以为当我dd(response)
时所有键都出现了,但是当我评论dd(response)
并发送主json 时,所有键都在json
中消失了。我不知道怎么了。我会附上dd()
和json
结果的截图。【参考方案2】:
translate
内dd($data)
translate
内 json
对象(api
响应)
我不知道什么改变了键。
【讨论】:
首先你应该更新你的问题。此外,它并没有告诉我们你具体做了什么,你如何返回响应等等。 我的问题是最新的。我只想在发送api
响应时显示密钥。目前,我无法得到它。我这样回复:return response()->make($data);
并收到HomeController
然后准备查看。
太棒了。我们怎么知道这里的数据是什么?它不包含在您的问题中!在您的问题中,您使用 $categories 而不是 $data
$data
是$categories
的集合,我将其命名为$data
。我把其中一部分命名为translate
。我无法在此处附加 200 多行 json 或 Controller :) 生成数组的主要函数我之前在此处添加了它。
如果错误出现在您的问题中未包含的代码的其他部分,我们将无法帮助您。以上是关于keyBy() 不会更改键。拉拉维尔 5.5的主要内容,如果未能解决你的问题,请参考以下文章