Повернення перших x елементів із масиву


139

Я хочу повернути перші 5 елементів з масиву. Як я можу це зробити?


5
wtf з downvotes в цьому питанні?
SilentGhost

2
Я підтримав усіх, оскільки кожна відповідь хороша.
Vili

Відповіді:


273

array_slice повертає фрагмент масиву

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

- це код, який ви хочете у вашому випадку повернути перші п’ять елементів


1
але це не спрацює з асоціативними масивами. ключі губляться.
ESCOBAR

4
@ESCOBAR: асоціативні масиви не обов'язково мають порядок, вони лише відображають ключі до значень; тож "значення 3 до 7" насправді не має сенсу ...
knittl

правильно, але в цьому випадку це не пов'язане з наказом. мова йде лише про перші 5 пунктів. і ви не можете використовувати array_slice тут.
ESCOBAR

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: ви, мабуть, переглянули неправильну сторінку. Моя вкладена
Andrejs Cainikovs

@AndrejsCainikovs справжній товариш, у мене була сторінка для array_slice, і я не помітив, що ваша відповідь була про array_splice ... моя погана: D
Kalko

3

Якщо ви просто хочете вивести перші 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.


-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.