2017-02-08 3 views
1

내가 일부 데이터 배열에서 컬렉션을 만들려고 노력 해요 :다차원 배열에서 컬렉션 만들기?

foreach ($myCollection as $product) { 
    echo $product->price; 
    echo $product->discount; 
} 

을하지만 기본 요소는 여전히있는 것으로 나타납니다

$myCollection = collect(
    ['product_id' => 1, 'price' => 200, 'discount' => '50'], 
    ['product_id' => 2, 'price' => 400, 'discount' => '50'] 
); 

나는 루프 밖으로 내가하고 싶으면하는 경우 배열 형식, 어떻게 위의 출력을 얻을 수 있습니까?

+0

하지 않았다 답변 중 하나가 아래로 문제가 해결? – Camilo

답변

0

컬렉션 정의에 구문 오류가 없습니다 :

$myCollection = collect([ 
    ['product_id' => 1, 'price' => 200, 'discount' => '50'], 
    ['product_id' => 2, 'price' => 400, 'discount' => '50'] 
]); 

을 또한, 당신이 Collection을 사용하고 있기 때문에, 더 이상 foreach 루프를 사용할 필요가 : 당신 같은

$myCollection->each(function ($item) { 
    echo $item['price']; 
}) 
+0

비 객체의 속성을 얻으려고 시도합니다. – panthro

+0

작동하지 않습니다.'#message : "비 객체의 속성을 얻으려고합니다." – Troyer

+0

편집은 여전히 ​​작동하지 않습니다. 속성 [가격]이 컬렉션 인스턴스에 존재하지 않습니다 – panthro

3

간단한을 배열 요소를 수집하고 있기 때문에 연관 배열의 컬렉션을 얻고 있으므로 콜렉션 도우미는 배열로 필요하면 수정할 수 없습니다.

개체를 수집하려면 개체 유형의 요소를 전달해야합니다.

이 같은 배열로 객체 데이터 유형을 캐스팅 할 수 있습니다

$myCollection = collect((object) array(
    (object) ['product_id' => 1, 'price' => 200, 'discount' => '50'], 
    (object) ['product_id' => 2, 'price' => 400, 'discount' => '50']) 
); 

은 그럼 당신은 개체의 컬렉션을 가지고!

+0

고마워,하지만 왜 객체를 사용 하겠어, 왜 그냥 일을 수집하지? – panthro

+0

@panthro 연관 배열 요소 그룹을 수집 중입니다. 그래서 콜렉션 도우미가 연관 배열로 필요할 경우를 대비하여 수정하지 않으려합니다.개체를 수집하려는 경우 개체 유형의 요소를 전달해야합니다. – Troyer

+0

아 이것은 내가 찾던 누락 된 링크입니다! –

0

함수 collect()는 요소 배열을 사용합니다. 당신은 []로 모든 요소를 ​​둘러싸는 다음 배열로를 떠나는 대신 개체를 컬렉션의 요소를 변환하여도 코드를 해결할 수

$myCollection = collect([ 
     (object)(['product_id' => 1, 'price' => 200, 'discount' => '50']), 
     (object)(['product_id' => 2, 'price' => 400, 'discount' => '50']) 
      ] 
    ); 
    foreach ($myCollection as $product) { 
     echo $product->price; 
     echo $product->discount; 
    } 
1

모음을로 내부 배열을 원하는 경우에, 당신이 할 수있는 그래서 다음과 같이

$myCollection = collect([ 
    ['product_id' => 1, 'price' => 200, 'discount' => '50'], 
    ['product_id' => 2, 'price' => 400, 'discount' => '50'] 
])->map(function($row) { 
    return collect($row); 
}); 

당신이 내부 배열은 객체 싶은 경우, 다음과 같이 당신이 할 수 있습니다 : 당신은 또한 각 결과를 반복 할 수

$myCollection = collect([ 
    ['product_id' => 1, 'price' => 200, 'discount' => '50'], 
    ['product_id' => 2, 'price' => 400, 'discount' => '50'] 
])->map(function($row) { 
    return (object) $row; 
}); 

.. .

$myCollection = collect([ 
    ['product_id' => 1, 'price' => 200, 'discount' => '50'], 
    ['product_id' => 2, 'price' => 400, 'discount' => '50'] 
])->map(function($row) { 
    return (object) $row; 
})->each(function($row) { 
    echo sprintf('ProductId: %d, Price: %d, Discount: %s'.PHP_EOL, $row->product_id, $row->price, $row->discount); 
}); 

출력 :

ProductId: 1, Price: 200, Discount: 50 
ProductId: 2, Price: 400, Discount: 50