2014-06-26 14 views
12

Tôi có một đối tượng bộ sưu tập laravel.Cách truy cập đối tượng thứ n trong đối tượng bộ sưu tập Laravel?

Tôi muốn sử dụng mô hình thứ n trong đó.

Làm cách nào để truy cập?

Chỉnh sửa:

Tôi không thể tìm thấy phương pháp phù hợp trong laravel documentation. Tôi có thể lặp lại bộ sưu tập trong vòng lặp foreach và phá vỡ khi mục thứ n được tìm thấy:

foreach($collection as $key => $object) 
{ 
    if($key == $nth) {break;} 
} 
// $object is now the nth one 

Nhưng điều này có vẻ lộn xộn.

Cách sạch hơn là thực hiện vòng lặp trên một lần và tạo một mảng đơn giản chứa tất cả các đối tượng trong bộ sưu tập. Nhưng điều này có vẻ như trùng lặp không cần thiết.

Trong laravel collection class documentation, có phương thức tìm nạp nhưng tôi nghĩ việc này tìm nạp đối tượng từ bộ sưu tập khớp với khóa chính, thay vì thứ n trong bộ sưu tập.

+0

[Sharing trợ giúp nghiên cứu của bạn s tất cả mọi người] (http://meta.programmers.stackexchange.com/questions/6559/why-is-research-important). Hãy cho chúng tôi biết những gì bạn đã thử và tại sao nó không đáp ứng nhu cầu của bạn. Điều này chứng minh rằng bạn đã dành thời gian để cố gắng tự giúp mình, nó giúp chúng tôi không nhắc lại câu trả lời rõ ràng và hầu hết tất cả đều giúp bạn nhận được câu trả lời cụ thể và phù hợp hơn. Ngoài ra, hãy xem [hỏi] – gnat

+3

Đủ công bằng. Đã chỉnh sửa câu hỏi. – theHands

Trả lời

23

Thấy như Illuminate\Support\Collection thực hiện ArrayAccess, bạn sẽ có thể chỉ đơn giản là sử dụng ký hiệu vuông khung, tức là

$collection[$nth] 

này gọi offsetGet nội bộ mà bạn cũng có thể sử dụng

$collection->offsetGet($nth) 

và cuối cùng, bạn có thể sử dụng phương thức get cho phép giá trị mặc định tùy chọn

$collection->get($nth) 
// or 
$collection->get($nth, 'some default value') 
+0

Rất cám ơn, các dấu ngoặc vuông hoạt động - thậm chí đơn giản hơn tôi nghĩ rằng nó có thể! Tôi cần phải đọc và nắm bắt với việc thực hiện – theHands

5

@ Câu trả lời của Phil không hoàn toàn có được phần tử thứ n, vì các phím có thể không có thứ tự. Nếu bạn đã có một bộ sưu tập hùng hồn từ một truy vấn db nó sẽ hoạt động tốt, nhưng nếu các phím của bạn không phải là tuần tự thì bạn sẽ cần phải làm một cái gì đó khác nhau.

$collection = collect([0 => 'bish', 2 => 'bash']); $collection[1] // Undefined index

Thay vào đó chúng ta có thể làm $collection->values()[1] // string(4) bash trong đó sử dụng array_values()

Hoặc thậm chí làm cho một macro để làm điều này:

Collection::macro('nthElement', function($offset, $default = null) { 
    return $this->values()->get($offset, $default); 
}): 

Ví dụ sử dụng vĩ mô:

$collection = collect([0 => 'bish', 2 => 'bash']); 
$collection->nthElement(1) // string(4) 'bash' 
$collection->nthElement(3) // undefined index 
$collection->nthElement(3, 'bosh') // string (4) bosh 
+0

Đây phải là câu trả lời được chấp nhận. – ProfileTwist

Các vấn đề liên quan