Mengembalikan x item pertama dari larik

139

Saya ingin mengembalikan 5 item pertama dari array. Bagaimana saya bisa melakukan ini?

HAI..
sumber
6
wtf dengan suara negatif dalam pertanyaan ini?
SilentGhost
2
Saya suka semua, karena setiap jawaban bagus.
Vili

Jawaban:

275

array_slice mengembalikan sepotong array

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

adalah kode yang Anda inginkan dalam kasus Anda untuk mengembalikan lima elemen pertama

rajutan
sumber
1
tetapi ini tidak akan berfungsi dengan array asosiatif. kuncinya hilang.
ESCOBAR
4
@ESCOBAR: array asosiatif tidak harus memiliki urutan, mereka hanya memetakan kunci ke nilai; jadi "nilai 3 hingga 7" sebenarnya tidak masuk akal…
knittl
benar, tetapi dalam hal ini tidak terkait dengan pesanan. ini hanya tentang 5 item pertama. dan Anda tidak dapat menggunakan array_slice di sini.
ESCOBAR
2
@ESCOBAR: tidak ada item pertama jika Anda tidak memiliki pesanan yang ditentukan. "Pertama" hanya berfungsi jika Anda dapat mengetahui item mana yang datang sebelum atau sesudah item lainnya. Tetapi hanya untuk bersenang-senang, Anda dapat menggabungkan kembali kunci dengan nilai-nilai array (meskipun masih belum ada urutan yang ditentukan):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl
1
@darkhorizon: " array_slice mengembalikan sepotong array". Tapi saya akan mengedit jawaban saya untuk membuatnya sedikit lebih jelas.
rajutan
9

array_splice - Hapus sebagian dari array dan ganti dengan yang lain:

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

Dari manual PHP:

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

Jika panjang dihilangkan, menghapus semuanya dari offset hingga akhir larik . Jika panjang ditentukan dan bernilai positif, maka banyak elemen itu akan dihilangkan. Jika panjang ditentukan dan bernilai negatif maka akhir dari bagian yang dihapus adalah banyak elemen dari akhir larik. Tip: untuk menghapus semuanya dari offset hingga akhir array saat penggantian juga ditentukan, gunakan count ($ input) untuk panjangnya.

Andrejs Cainikovs
sumber
sintaks untuk mengembalikan 5 elemen pertama adalah array_splice ($ input, 5)
aland
@AndrejsCainikovs Sesuai dengan php.net, "Jika panjang dihilangkan, maka urutan akan memiliki segalanya mulai dari offset hingga akhir array." Teks yang dicetak tebal pada jawaban menyatakan sebaliknya.
Kalko
@Kalko: Anda mungkin melihat halaman yang salah. Pernyataan salin-tempel saya masih valid: php.net/manual/en/function.array-splice.php
Andrejs Cainikovs
@AndrejsCainikovs benar sobat, saya memiliki halaman untuk array_slice dan tidak menyadari jawaban Anda tentang array_splice ... saya buruk: D
Kalko
2

Jika Anda hanya ingin mengeluarkan 5 elemen pertama, Anda harus menulis sesuatu seperti:

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

    }

  }

?>

Jika Anda ingin menulis fungsi yang mengembalikan bagian dari array, Anda harus menggunakan array_slice:

<?php

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

?>
Anax
sumber
Mengapa Anda membungkus yang sudah ada array_slice()yang sudah melakukan pekerjaan ke dalam fungsi yang tidak perlu ini yang menambahkan overhead dan tidak ada nilai?
aexl
0

Anda dapat menggunakan fungsi array_slice, tetapi apakah Anda akan menggunakan nilai lain? atau hanya 5 yang pertama? karena jika Anda hanya akan menggunakan 5 yang pertama Anda dapat menggunakan LIMIT pada SQL.

Cesar
sumber
-4

Cara yang lebih berorientasi objek adalah memberikan rentang ke metode # []. Contohnya:

Katakanlah Anda menginginkan 3 item pertama dari sebuah array.

angka = [1,2,3,4,5,6]

angka [0..2] # => [1,2,3]

Katakanlah Anda menginginkan x item pertama dari sebuah array.

angka [0..x-1]

Hal yang hebat tentang metode ini adalah jika Anda meminta lebih banyak item daripada yang dimiliki array, itu hanya mengembalikan seluruh array.

angka [0..100] # => [1,2,3,4,5,6]

Jason
sumber
3
Tetapi php tidak mendukung rentang. Apakah Anda yakin tidak sedang membicarakan ruby ​​atau semacamnya?
Victor Marchuk
2
"Cara yang lebih berorientasi objek"? Jawaban ini tidak ada hubungannya dengan pemrograman berorientasi objek.
Ducky