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


139

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


6
wtf с отрицательными голосами в этом вопросе?
SilentGhost

2
Я проголосовал за всех, так как каждый ответ хорош.
Vili

Ответы:


275

array_slice возвращает кусок массива

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

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


1
но это не будет работать с ассоциативными массивами. ключи теряются.
ЭСКОБАР 06

4
@ESCOBAR: ассоциативные массивы не обязательно имеют порядок, они только сопоставляют ключи со значениями; так что «значения от 3 до 7» в любом случае не имеют смысла…
knittl 06

верно, но в данном случае это не связано с порядком. это примерно первые 5 пунктов. и вы не можете использовать здесь array_slice.
ЭСКОБАР

2
@ESCOBAR: нет первых элементов, если у вас нет определенного порядка. «Первый» работает только в том случае, если вы можете сказать, какой элемент стоит до или после других элементов. Но просто для удовольствия вы можете повторно комбинировать ключи со значениями массива (хотя до сих пор нет определенного порядка):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl

1
@darkhorizon: « array_slice возвращает часть массива». Но я отредактирую свой ответ, чтобы было немного понятнее.
knittl

9

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) для длины.


синтаксис для возврата первых 5 элементов: array_splice ($ input, 5)
aland

@AndrejsCainikovs Согласно php.net, «Если длина не указана, то в последовательности будет все, от смещения до конца массива». Полужирный текст ответа говорит об обратном.
Калко,

@Kalko: вы, наверное, не на ту страницу смотрели. Мое скопированное заявление все еще в силе: php.net/manual/en/function.array-splice.php
Андрей Кайниковс

@AndrejsCainikovs настоящий друг, у меня была страница для array_slice, и я не заметил, что ваш ответ был о array_splice ... мой плохой: D
Калко

2

Если вы просто хотите вывести первые 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 );
  }

?>

Зачем вам оборачивать существующее, array_slice()которое уже выполняет работу, в эту ненужную функцию, которая добавляет накладные расходы и не имеет ценности?
aexl

0

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


-4

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

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

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

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

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

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

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

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


3
Но php не поддерживает диапазоны. Вы уверены, что говорите не о рубине или о чем-то подобном?
Виктор Марчук

2
«Более объектно-ориентированный способ»? Этот ответ не имеет ничего общего с объектно-ориентированным программированием.
Ducky
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.