从数组返回前x个项目


139

我想从数组中返回前5个项目。我怎样才能做到这一点?


5
wtf与downvotes在这个问题上?
SilentGhost

2
由于每个答案都不错,因此我全力以赴。
维里

Answers:


273

array_slice 返回数组的切片

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

是您要返回前五个元素的代码


1
但这不适用于关联数组。钥匙丢了。
ESCOBAR 2014年

4
@ESCOBAR:关联数组不一定具有顺序,它们仅将键映射到值;所以“值3到7”实际上并没有任何意义……
knittl 2014年

对,但是在这种情况下,它与订单无关。这只是前5个项目。而且您不能在此处使用array_slice。
ESCOBAR 2014年

2
@ESCOBAR:如果您没有定义的订单,则没有第一项。仅当您可以确定哪个项目在其他项目之前或之后时,“第一”才有效。但是只是为了好玩,您可以将键与数组的值重新组合(尽管仍然没有定义的顺序):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl 2014年

1
@darkhorizo​​n:“ 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]])

如果省略length,则删除从offset到array末尾的所有内容。如果指定了length且为正,则将删除许多元素。如果指定了length且为负数,则删除部分的末尾将是数组末尾的元素个数。提示:如果还指定了替换,则要删除从偏移量到数组末尾的所有内容,请使用count($ input)作为length。


返回前5个元素的语法是array_splice($ input,5)
2013年

@AndrejsCainikovs根据php.net,“如果省略长度,则序列将包含从偏移量到数组末尾的所有内容。” 答案的粗体字指出的恰好相反。
Kalko

@Kalko:您可能看错了页面。我的复制粘贴语句仍然有效:php.net/manual/en/function.array-splice.php
Andrejs Cainikovs

@AndrejsCainikovs真正的伴侣,我有array_slice的页面,却没有注意到您的答案是关于array_splice ...我的错:D
Kalko 2016年

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个,则可以对SQL使用LIMIT。


-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.