Возврат первых элементов x из массива


105

Я хочу вернуть первые 5 элементов из массива. Как я могу это сделать?

+4

wtf with downvotes в этом вопросе? 15 окт. 092009-10-15 10:14:55

+1

Я обогнал всех, так как каждый ответ хорош. 15 окт. 092009-10-15 10:16:09

217

array_slice возвращает часть массива с

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

это код, который вы хотите в вашем случае, чтобы вернуть первые пять элементов

  0

, но это не будет работать с ассоциативными массивами. ключи теряются. 06 июн. 142014-06-06 14:40:47

+3

@ESCOBAR: ассоциативные массивы не обязательно имеют порядок, они отображают только ключи к значениям; поэтому «значения от 3 до 7» на самом деле не имеют никакого смысла ... 06 июн. 142014-06-06 15:45:54

  0

вправо, но в этом случае он не имеет отношения к заказу. это примерно первые 5 предметов. и здесь вы не можете использовать array_slice. 10 июн. 142014-06-10 16:20:20

+2

@ESCOBAR: нет ** первых ** предметов, если у вас нет определенного порядка. «Первое» работает только в том случае, если вы можете указать, какой предмет приходит до или после других предметов. Но просто для удовольствия, вы можете повторно объединить ключи со значениями массива (хотя до сих пор нет определенного порядка): 'array_combine (array_slice (array_keys ($ array), 0, 5), array_slice ($ array, 0, 5)) ' 10 июн. 142014-06-10 20:07:36

  0

ok вы очень строго придерживаетесь« первых 5 элементов ». Но что вы получаете (или называете его), если вы перебираете массив и останавливаете его после 5-го элемента? Вы всегда будете получать те же 5 предметов. если вы понимаете, о чем я? 12 июн. 142014-06-12 11:44:21

  0

@ESCOBAR: см. Мой предыдущий комментарий. Он даст вам первые 5 ключей + значения. Похоже, что ассоциативные массивы в php [имеют определенный порядок после всех] (http://stackoverflow.com/q/950975/112968) 12 июн. 142014-06-12 12:02:29

  0

Обратите внимание, что array_slice() НЕ передается по ссылке. Поэтому, если вы хотите перезаписать свой массив с усеченным массивом, это будет: '$ array = array_slice ($ array, 0, 5);' 20 янв. 152015-01-20 00:59:15

+1

@darkhorizon: "' array_slice' ** возвращает ** срез массива ». Но я отредактирую свой ответ, чтобы сделать его немного яснее. 20 янв. 152015-01-20 06:19:48

  0

@ESCOBAR, если preserve_keys установлен в TRUE, ключи остаются 12 дек. 162016-12-12 15:06:32


6

array_splice - Удалите часть массива и заменить его чем-то другим:

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

Из PHP инструкции:

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

Если длина опущена, удаляет все от смещения до конца массива. Если длина указана и положительна, то многие элементы будут удалены. Если длина указана и отрицательна, то конец удаленной части будет состоять из множества элементов из конца массива. Совет. Чтобы удалить все из смещения в конец массива, когда указана замена, используйте count ($ input) для длины.

  0

Синтаксис для возврата первых 5 элементов: array_splice ($ input, 5) 21 май. 132013-05-21 21:20:22

  0

Спасибо, исправлено. 22 май. 132013-05-22 12:56:39

  0

@AndrejsCainikovs Согласно php.net, «Если длина опущена, то последовательность будет иметь все от смещения до конца массива». В полуживом текста ответа указано точно противоположное. 12 дек. 162016-12-12 15:04:57

  0

@Kalko: вы, вероятно, смотрите на неправильную страницу. Мой экземпляр, заключенный в скобки, по-прежнему действителен: http://php.net/manual/en/function.array-splice.php 12 дек. 162016-12-12 15:24:38

  0

@ Настоящий помощник AndrejsCainikovs, у меня была страница для array_slice, и я не заметил, что ваш ответ был о array_splice. ..my bad: D 13 дек. 162016-12-13 20:20:06


1

Если вы просто хотите вывести первые 5 элементов, вы должны написать что-то вроде:

<?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; 

    } 

    } 

?> 

Если вы хотите, чтобы написать функцию, которая возвращает часть массива, вы должны использовать array_slice:

<?php 

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

?> 

0

Вы можете использовать функцию array_slice, но будете ли вы использовать другие значения? или только первые 5? потому что если вы будете использовать только первые 5, вы можете использовать LIMIT на SQL.


-3

Более объектно ориентированным способом было бы предоставить диапазон методу # []. Например:

Скажите, что вы хотите получить первые 3 элемента из массива.

числа = [1,2,3,4,5,6]

числа [0..2] # => [1,2,3]

Допустим, вы хотите первый х элементы из массива.

числа [0..x-1]

Большая вещь об этом методе, если вы просите больше деталей, чем в массиве, он просто возвращает весь массив.

номера [0..100] # => [1,2,3,4,5,6]

+3

Но php не поддерживает диапазоны. Вы уверены, что не говорите о рубине или что-то в этом роде? 22 дек. 112011-12-22 22:36:56

+1

«Более объектно-ориентированный способ»? Этот ответ не имеет ничего общего с объектно-ориентированным программированием. 16 сен. 172017-09-16 15:48:29