Bagaimana cara mendapatkan item pertama dari array PHP asosiatif?

146

Jika saya memiliki array seperti:

$array['foo'] = 400;
$array['bar'] = 'xyz';

Dan saya ingin mendapatkan item pertama dari array itu tanpa mengetahui kuncinya, bagaimana saya melakukannya? Apakah ada fungsi untuk ini?

Klik Upvote
sumber
(referensi) Array dan Array Fungsi
Gordon

Jawaban:

288

reset() memberi Anda nilai pertama array jika Anda memiliki elemen di dalam array:

$value = reset($array);

Ini juga memberi Anda FALSEjika array kosong.

soulmerge
sumber
Untuk diperhatikan:$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
cwallenpoole
Informasi lebih lanjut tentang fungsi reset: www.w3schools.com/php/func_array_reset.asp
Paul Chris Jones
Bagaimana jika saya ingin mendapatkan kunci dan nilainya?
Timberman
51

PHP <7.3

Jika Anda tidak cukup tahu tentang array (Anda tidak yakin apakah kunci pertama foo atau bar ) maka array mungkin juga, mungkin, kosong .

Jadi akan lebih baik untuk memeriksa, terutama jika ada kemungkinan bahwa nilai yang dikembalikan mungkin boolean FALSE:

$value = empty($arr) ? $default : reset($arr);

Kode di atas menggunakan resetdan memiliki efek samping (me-reset pointer internal array), jadi Anda mungkin lebih suka menggunakan array_sliceuntuk dengan cepat mengakses salinan elemen pertama array:

$value = $default;
foreach(array_slice($arr, 0, 1) as $value);

Dengan asumsi Anda ingin mendapatkan kunci dan nilainya secara terpisah , Anda perlu menambahkan parameter keempat ke array_slice:

foreach(array_slice($arr, 0, 1, true) as $key => $value);

Untuk mendapatkan item pertama sebagai pasangan ( key => value):

$item = array_slice($arr, 0, 1, true);

Modifikasi sederhana untuk mendapatkan lalu item, kunci dan nilai secara terpisah:

foreach(array_slice($arr, -1, 1, true) as $key => $value);

kinerja

Jika array tidak terlalu besar, Anda sebenarnya tidak perlu array_slicedan bisa mendapatkan salinan seluruh array kunci, lalu dapatkan item pertama:

$key = count($arr) ? array_keys($arr)[0] : null;

Jika Anda memiliki array yang sangat besar, panggilan untuk array_keysakan membutuhkan waktu dan memori yang signifikan lebih dari array_slice(kedua fungsi berjalan di array, tetapi yang terakhir berakhir segera setelah telah mengumpulkan jumlah item yang diperlukan - yang merupakan satu).

Pengecualian penting adalah ketika Anda memiliki kunci pertama yang menunjuk ke objek yang sangat besar dan berbelit-belit. Dalam hal ini array_sliceakan menduplikasi objek besar pertama itu, sementara array_keyshanya akan mengambil kunci.

PHP 7.3

PHP 7.3 mengimplementasikan array_key_first()juga array_key_last(). Ini secara eksplisit disediakan untuk mengakses kunci pertama dan terakhir secara efisien tanpa mengatur ulang keadaan internal array sebagai efek samping.

Jadi dalam PHP 7.3 yang pertama nilai dari $arraydapat diakses dengan

$array[array_key_first($array)];

Anda masih harus memeriksa apakah array tidak kosong, atau Anda akan mendapatkan kesalahan:

$firstKey = array_key_first($array);
if (null === $firstKey) {
    $value = "Array is empty"; // An error should be handled here
} else {
    $value = $array[$firstKey];
}
LSerni
sumber
@AhmedShefeer, jawaban yang lain bukan hanya yang diterima tetapi sudah ada selama delapan tahun lagi . Saya semacam mengambil remah-remah di sini :-D. Tapi terima kasih untuk mosi percaya!
LSerni
1
Menurut saya ini adalah jawaban terbaik, karena satu-satunya yang tidak usang yang memberikan kunci dan nilainya adalah loop foreach yang dibatalkan, yang canggung. Jawaban lain hanya memberikan nilai tanpa kunci.
sootsnoot
1
Saya suka ini, pendekatan modern dan diperbarui dengan waktu.
sanjeet bisht
@LSerni Tidak tahu apakah Anda masih aktif, tapi saya macet dan pos yang dijelaskan dan diperbarui dengan baik ini menyelamatkan saya. Terima kasih
izk
@ ya, aku selalu aktif! :-D
LSerni
44

Loop palsu yang terputus pada iterasi pertama:

$key = $value = NULL;
foreach ($array as $key => $value) {
    break;
}

echo "$key = $value\n";

Atau gunakan each()( peringatan: ditinggalkan pada PHP 7.2.0 ):

reset($array);
list($key, $value) = each($array);

echo "$key = $value\n";
John Kugelman
sumber
2
Mungkin karena reset () lebih sederhana.
mjs
1
Karena solusinya ada di baris kode pertama Anda, tetapi Anda terus menulis baris yang sama sekali tidak dibutuhkan.
Markus
21
reset tidak akan mengembalikan kunci
HarryFink
3
+1 untuk 'loop palsu'. Saya harus mengambil kunci dan nilai elemen pertama, sementara tidak melalui setiap elemen. The reset()Fungsi hanya akan mengambil nilai pertama.
Phil Cross
2
+1 untuk loop palsu juga, saya perlu menyimpan kunci sehingga reset bukan pilihan
isJustMe
25

Ada beberapa opsi. array_shift()akan mengembalikan elemen pertama, tetapi juga akan menghapus elemen pertama dari array.

$first = array_shift($array);

current() akan mengembalikan nilai array yang ditunjuk oleh penunjuk memori internal, yang merupakan elemen pertama secara default.

$first = current($array);

Jika Anda ingin memastikan bahwa itu menunjuk ke elemen pertama, Anda selalu dapat menggunakan reset().

reset($array);
$first = current($array);
Jeremy Ruten
sumber
3
Saya suka jawaban ini sebagai yang paling lengkap, tetapi perhatikan reset()sebenarnya mengembalikan elemen, jadi setelah itu dengan $first = current($array)berlebihan.
Tom Auger
9

Hanya agar kita memiliki beberapa opsi lain: reset($arr);cukup baik jika Anda tidak berusaha mempertahankan pointer array di tempatnya, dan dengan array yang sangat besar itu menimbulkan jumlah overhead yang minimal. Yang mengatakan, ada beberapa masalah dengan itu:

$arr = array(1,2);
current($arr); // 1
next($arr);    // 2
current($arr); // 2
reset($arr);   // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.

Cara melakukan ini tanpa mengubah pointer:

$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));

Manfaatnya $arr[reset(array_keys($arr))];adalah ia memunculkan peringatan jika array benar-benar kosong.

cwallenpoole
sumber
jawaban yang sangat deskriptif, dan itu sangat berarti bagi orang lain. Terima kasih sobat.
Jigar7521
7

cara lain yang mudah dan sederhana untuk melakukannya menggunakan array_values

array_values($array)[0]
Pemula
sumber
reset()adalah pilihan yang jauh lebih baik karena mengembalikan false jika array kosong. solusi Anda tidak akan berfungsi misalnya dalam pertanyaan
Northys
1
Dalam PHP 7+ sesuatu seperti ini akan berfungsi:array_values($array)[0] ?? FALSE
MarthyM
4

Uji apakah variabelnya adalah array sebelum mendapatkan elemen pertama. Ketika secara dinamis membuat array jika diatur ke nol Anda mendapatkan kesalahan.

Sebagai contoh:

if(is_array($array))
{
  reset($array);
  $first = key($array);
}
w3bMak3r
sumber
3

Kita bisa $first = reset($array);

Dari pada

reset($array);
$first = current($array);

Sebagai reset()

mengembalikan elemen pertama array setelah reset;

Suryasish Dey
sumber
2

Anda dapat membuat:

$values = array_values($array);
echo $values[0];
Terima kasih
sumber
2

Gunakan fungsi reset () untuk mengeluarkan item pertama dari array itu tanpa mengetahui kunci untuknya seperti ini.

$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);

output // 400

Wakar Ahmad Khan
sumber
2

Anda bisa mencoba ini.

Untuk mendapatkan nilai pertama array: -

<?php
   $large_array = array('foo' => 'bar', 'hello' => 'world');
   var_dump(current($large_array));
?>

Untuk mendapatkan kunci pertama dari array

<?php
   $large_array = array('foo' => 'bar', 'hello' => 'world');
   $large_array_keys = array_keys($large_array);
   var_dump(array_shift($large_array_keys));
?>
Berjalan
sumber
1

Anda bisa menggunakan array_shift

Cesar
sumber
4
Namun ketahuilah bahwa array akan menghapus satu item.
challet
1

Saya melakukan ini untuk mendapatkan nilai pertama dan terakhir. Ini bekerja dengan lebih banyak nilai juga.

$a = array(
    'foo' => 400,
    'bar' => 'xyz',
);
$first = current($a);   //400
$last = end($a);    //xyz
Daantje
sumber
Ini hanya berfungsi ketika pointer internal berada di elemen pertama. Meskipun ini bagus karena tidak mengatur ulang posisi pointer, itu hanya berfungsi ketika pointer sudah beristirahat.
cjc
1

Dimulai dengan PHP 7.3.0 dimungkinkan untuk dilakukan tanpa mengatur ulang pointer internal. Anda akan menggunakannya array_key_first. Jika Anda yakin bahwa array Anda memiliki nilai-nilai di dalamnya maka Anda bisa melakukannya:

$first = $array[array_key_first($array)];

Kemungkinan besar, Anda akan ingin menangani case di mana array kosong:

$first = (empty($array)) ? $default : $array[array_key_first($array)];
cjc
sumber
-3

Anda bisa menggunakannya $array[0]. itu akan memberi Anda item pertama selalu

Kareem Salem
sumber