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?
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?
Jawaban:
reset() memberi Anda nilai pertama array jika Anda memiliki elemen di dalam array:
$value = reset($array);
Ini juga memberi Anda FALSEjika array kosong.
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
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);
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 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];
}
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";
reset()Fungsi hanya akan mengambil nilai pertama.
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);
reset()sebenarnya mengembalikan elemen, jadi setelah itu dengan $first = current($array)berlebihan.
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.
cara lain yang mudah dan sederhana untuk melakukannya menggunakan array_values
array_values($array)[0]
reset()adalah pilihan yang jauh lebih baik karena mengembalikan false jika array kosong. solusi Anda tidak akan berfungsi misalnya dalam pertanyaan
array_values($array)[0] ?? FALSE
Kita bisa
$first = reset($array);
Dari pada
reset($array);
$first = current($array);
Sebagai reset()
mengembalikan elemen pertama array setelah reset;
Anda dapat membuat:
$values = array_values($array);
echo $values[0];
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
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));
?>
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
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)];
Anda bisa menggunakannya $array[0]. itu akan memberi Anda item pertama selalu