ส่งคืนรายการ x แรกจากอาร์เรย์


139

ฉันต้องการส่งคืน 5 รายการแรกจากอาร์เรย์ ฉันจะทำสิ่งนี้ได้อย่างไร


5
wtf with downvote ในคำถามนี้?
SilentGhost

2
ฉัน upvoting ทั้งหมดเนื่องจากคำตอบแต่ละข้อดี
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 ($ อินพุต 5)
Aland

@AndrejsCainikovs ตาม php.net "ถ้าความยาวถูกละไว้ลำดับจะมีทุกอย่างตั้งแต่ออฟเซ็ตจนถึงจุดสิ้นสุดของอาร์เรย์" ข้อความที่เป็นตัวหนาของผู้ตอบตอบจะตรงข้ามกันทุกประการ
Kalko

@Kalko: คุณอาจจะดูผิดหน้า คำสั่งการคัดลอกวางของฉันยังคงถูกต้อง: php.net/manual/en/function.array-splice.php
Andrejs Cainikovs

@AndrejsCainikov เพื่อนแท้ฉันมีหน้าสำหรับ 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 ไม่รองรับช่วง คุณแน่ใจหรือว่าไม่ได้พูดถึงทับทิมหรืออะไรทำนองนั้น
Victor Marchuk

2
"เป็นวิธีเชิงวัตถุมากขึ้น"? คำตอบนี้ไม่เกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุ
Ducky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.