2017-12-12 18 views
0

내가하려고하는 것은 객체의 배열에서 키 - 값 쌍이있는 배열을 반환해야한다는 것입니다.Laravel Collections를 사용하여 리 팩터링하는 객체가 실패합니다.

api에서 나는 이와 비슷한 객체를 얻습니다.

array:8 [▼ 
    0 => TargetingSearch {#229 ▼ 
    #data: array:6 [▼ 
     "id" => "6005609368513" 
     "name" => "Software" 
     "audience_size" => 565991450 
     "path" => array:4 [▶] 
     "description" => "" 
     "topic" => "Technology" 
    ] 
    #_type_checker: TypeChecker {#228 ▶} 
    } 

간단한 방법은 객체를 반복하고 값을 배열로 밀어 넣는 것입니다.

$codes = []; 
    foreach($objects as $object) { 
     $codes[] = [ 
     'id' => $object->id, 
     'name' => $object->name, 
     ]; 
    } 

내가 정확히 필요한 것을 반환합니다.

['id' => 321, 'name' => "item1"], 
['id' => 321, 'name' => "item1"], 
['id' => 321, 'name' => "item1"], 

나는 이것이 관리하기가 조금 어렵다고 생각하고 내가하려고하는 것은 좀 더 읽기 쉬운 것입니다.

예를 들어 Laravel 컬렉션 클래스를 사용하면 다음과 같이 할 수 있습니다.

$codes = collect($objects)->pluck('id', 'name')->toArray(); 

여기서 문제는 키를 반환하지 않는다는 것입니다. 내가

$codes = collect($objects)->only('id', 'name')->toArray(); 

를 사용하는 경우 개체 자체가 모든 것을 엉망으로되어 있기 때문에

["item1" => "123"], 
["item2" => "321"], 
["item3" => "213"], 

그것은 하늘의 배열을 돌려줍니다.

누구든지이 문제를 어떻게 해결할 수 있는지 알고 있습니까? 당신이 사용하는 "지도"를 할 수

답변

1

방법

collect($objects)->map(function ($item) { 
     return [ 
      'id' => $item->id, 
      'name' => $item->name 
     ]; 
});