2017-12-18 7 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');을 지정해야합니다. 당신은 새로운 어레이를 만들어야한다는 것을 의미합니다. 당신은 축 배열을 바꾸지 않을 것입니다. – 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" 
     } 
     ] 
    } 
    } 
] 

을 그래서 당신은 결과 dd($data)

enter image description here

내부

+0

이 번역은 내'json' 객체의 주요 부분입니다. 콜렉션 내에서 사용하기 위해 이것을 분리하고 다시 넣어야합니까? – rufatZZ

+0

죄송합니다. 무슨 뜻인지 모르겠지만 컬렉션을 사용하고 있다면 광산 코드를 비교하고 올바른 결과를 확인하십시오. –

+0

네, 저도 노력 중입니다. :) 답장을 보내 주셔서 감사합니다 :) – rufatZZ

0

translate를 변경된 참조로 translate 인 IDE json 객체 (api 응답)

enter image description here

내가 키를 변경 모르겠어요.

+0

먼저 질문을 업데이트해야합니다. 또한 정확히 무엇을하는지, 응답을 어떻게 반환하는지 등은 알려주지 않습니다. –

+0

내 질문에 대한 최신 정보가 있습니다. 나는 단지'api' 응답을 보내면 키가 나타나기를 원한다. 지금은 얻을 수 없습니다. 다음과 같은 응답을 리턴한다 :'return response() -> make ($ data);'그리고'HomeController'를 받아 view를 준비한다. – rufatZZ

+0

좋습니다. 어떻게 데이터가 여기에 있는지 알 수 있습니까? 귀하의 질문에 포함되지 않았습니다! 당신의 질문에 당신은 $ categories가 아닌 $ categories를 가지고 무언가를 만듭니다. –