Trả lại các mục đầu tiên x từ mảng


105

Tôi muốn trả lại 5 mục đầu tiên từ mảng. Tôi có thể làm cái này như thế nào?

+4

wtf với downvotes trong câu hỏi này? 15 oct. 092009-10-15 10:14:55

+1

Tôi upvoted tất cả, vì mỗi câu trả lời là tốt. 15 oct. 092009-10-15 10:16:09

217

array_slice trả về một lát một mảng

$sliced_array = array_slice($array, 0, 5) 

là mã bạn muốn trong trường hợp của bạn để trả lại năm yếu tố đầu tiên

  0

nhưng điều này sẽ không hoạt động với mảng kết hợp. các phím bị mất. 06 jun. 142014-06-06 14:40:47

+3

@ESCOBAR: mảng kết hợp không nhất thiết phải có thứ tự, chúng chỉ ánh xạ khóa tới giá trị; vì vậy "các giá trị từ 3 đến 7" không thực sự hợp lý ... 06 jun. 142014-06-06 15:45:54

  0

ngay, nhưng trong trường hợp này, nó không liên quan đến thứ tự. nó chỉ là về 5 mục đầu tiên. và bạn không thể sử dụng array_slice ở đây. 10 jun. 142014-06-10 16:20:20

+2

@ESCOBAR: không có ** mục ** đầu tiên nếu bạn không có thứ tự xác định. "Đầu tiên" chỉ hoạt động nếu bạn có thể cho biết mục nào đến trước hoặc sau các mục khác. Nhưng chỉ để giải trí, bạn có thể kết hợp lại các khóa với các giá trị của mảng (mặc dù vẫn không có thứ tự xác định): 'array_combine (array_slice (mảng_keys ($ array), 0, 5), array_slice ($ mảng, 0, 5)) ' 10 jun. 142014-06-10 20:07:36

  0

ok bạn đang dùng nó rất nghiêm ngặt với" 5 mục đầu tiên ". Nhưng những gì bạn nhận được (hoặc gọi nó) nếu bạn iterate mảng và ngăn chặn nó sau khi mục thứ 5? Bạn sẽ có được 5 mục giống nhau. Bạn có hiểu ý tôi? 12 jun. 142014-06-12 11:44:21

  0

@ESCOBAR: xem nhận xét trước của tôi. Nó sẽ giúp bạn có được 5 khóa + giá trị đầu tiên. Dường như mảng kết hợp trong php [có một thứ tự được xác định sau khi tất cả] (http://stackoverflow.com/q/950975/112968) 12 jun. 142014-06-12 12:02:29

  0

Lưu ý rằng array_slice() không được truyền theo tham chiếu. Vì vậy, nếu bạn muốn ghi đè lên mảng của bạn với mảng cắt ngắn, nó sẽ là: '$ array = array_slice ($ array, 0, 5);' 20 jan. 152015-01-20 00:59:15

+1

@darkhorizon: "' array_slice' ** trả về ** một mảng của một mảng ". Nhưng tôi sẽ chỉnh sửa câu trả lời của tôi để làm cho nó rõ ràng hơn một chút. 20 jan. 152015-01-20 06:19:48

  0

@ESCOBAR nếu retain_keys được đặt thành TRUE, các phím vẫn giữ nguyên là 12 dec. 162016-12-12 15:06:32


6

array_splice - Hủy bỏ một phần của mảng và thay thế bằng cái gì khác:

$input = array(1, 2, 3, 4, 5, 6); 
array_splice($input, 5); // $input is now array(1, 2, 3, 4, 5) 

Từ PHP dẫn sử dụng:

array array_splice (array &$input , int $offset [, int $length = 0 [, mixed $replacement]]) 

Nếu chiều dài được bỏ qua, loại bỏ tất cả mọi thứ từ bù đắp đến cùng của mảng. Nếu độ dài được xác định và là số dương, thì nhiều phần tử sẽ bị xóa. Nếu độ dài được xác định và âm thì phần cuối của phần bị loại bỏ sẽ là nhiều phần tử từ phần cuối của mảng. Mẹo: để loại bỏ tất cả mọi thứ từ bù đắp đến cuối mảng khi thay thế cũng được chỉ định, sử dụng đếm ($ đầu vào) cho chiều dài.

  0

cú pháp trả về 5 phần tử đầu tiên là mảng_splice ($ input, 5) 21 may. 132013-05-21 21:20:22

  0

Cảm ơn, đã được sửa ngay bây giờ. 22 may. 132013-05-22 12:56:39

  0

@AndrejsCainikovs Theo php.net, "Nếu độ dài bị bỏ qua, thì trình tự sẽ có mọi thứ từ bù đắp cho đến khi kết thúc mảng." Văn bản in đậm của người trả lời cho biết chính xác điều ngược lại. 12 dec. 162016-12-12 15:04:57

  0

@Kalko: có thể bạn đang xem nhầm trang. Câu lệnh sao chép của tôi vẫn hợp lệ: http://php.net/manual/en/function.array-splice.php 12 dec. 162016-12-12 15:24:38

  0

@AndrejsCainikovs người bạn đời thực sự, tôi đã có trang cho array_slice và không nhận thấy câu trả lời của bạn là về array_splice. ..xấu của tôi: D 13 dec. 162016-12-13 20:20:06


1

Nếu bạn chỉ muốn đầu ra 5 yếu tố đầu tiên, bạn nên viết cái gì đó như:

<?php 

    if (!empty ($an_array)) { 

    $min = min (count ($an_array), 5); 

    $i = 0; 

    foreach ($value in $an_array) { 

     echo $value; 
     $i++; 
     if ($i == $min) break; 

    } 

    } 

?> 

Nếu bạn muốn viết một hàm trả về một phần của mảng, bạn nên sử dụng array_slice:

<?php 

    function GetElements($an_array, $elements) { 
    return array_slice($an_array, 0, $elements); 
    } 

?> 

0

Bạn có thể sử dụng hàm array_slice, nhưng bạn có sử dụng các giá trị khác không? hoặc chỉ 5 người đầu tiên? bởi vì nếu bạn chỉ sử dụng 5 đầu tiên, bạn có thể sử dụng LIMIT trên SQL.


-3

Một cách hướng đối tượng khác sẽ là cung cấp phạm vi cho phương thứC# []. Ví dụ:

Giả sử bạn muốn 3 mục đầu tiên từ một mảng.

số = [1,2,3,4,5,6]

số [0..2] # => [1,2,3]

Giả sử bạn muốn x đầu tiên các mục từ một mảng.

số [0..x-1]

Những điều tuyệt vời về phương pháp này là nếu bạn yêu cầu cho các hạng mục hơn mảng có, nó chỉ đơn giản trả về toàn bộ mảng.

số [0..100] # => [1,2,3,4,5,6]

+3

Nhưng php không hỗ trợ dải ô. Bạn có chắc là bạn không nói về ruby ​​hay gì đó như thế không? 22 dec. 112011-12-22 22:36:56

+1

"Một cách hướng đối tượng hơn"? Câu trả lời này không liên quan gì đến lập trình hướng đối tượng. 16 sep. 172017-09-16 15:48:29