2017-12-18 161 views
2

我正在与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),我得到了我想要的结果,但最后的结果与之前一样。谢谢!

+0

你必须在新的数组变量中赋值$ row-> translate-> keyBy('lang');'。意味着你必须创建新的数组..你不会改变axisting数组。 – GYaN

+0

你也可以尝试'as&$ row' –

+0

当我使用'as&$ row'时,没有什么改变。 – rufatZZ

回答

0

它应该没有任何问题,我相信问题是在别的地方。看看这个例子:

$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" 
     } 
     ] 
    } 
    } 
] 

所以你看结果发生了变化

+0

这是我的'json'对象的主要部分。我必须分开这个在收藏中使用并放回去? – rufatZZ

+0

对不起,我不知道你的意思,但是正如我向你们展示的那样,如果你使用的是收藏品,那么它应该可以正常工作,比较我的代码和你的代码,并确保你验证了有效的结果 –

+0

是的,我正在研究它。 :)感谢您的回复:) – rufatZZ

0

translatedd($data)

enter image description here

translate ins IDE json对象(api响应)

enter image description here

我不知道是什么改变了密钥。

+0

首先你应该更新你的问题。另外它不会告诉我们你到底做了什么,你如何返回响应等等。 –

+0

我的问题是最新的。当我发送'api'响应时,我只想显示键。目前,我无法得到它。我返回如下的响应:'return response() - > make($ data);'并接收它'HomeController'然后准备好查看。 – rufatZZ

+0

太好了。我们怎么能知道这里的数据?它不包含在你的问题中!在你的问题中,你使用$ categories而不是$ data来做一些事情 –