ถ้าฉันมีอาร์เรย์เช่น:
$array['foo'] = 400;
$array['bar'] = 'xyz';
และฉันต้องการเอาไอเท็มแรกออกจากอาร์เรย์นั้นโดยไม่ทราบว่ามีกุญแจสำหรับมันฉันจะทำอย่างไร มีฟังก์ชั่นนี้หรือไม่?
ถ้าฉันมีอาร์เรย์เช่น:
$array['foo'] = 400;
$array['bar'] = 'xyz';
และฉันต้องการเอาไอเท็มแรกออกจากอาร์เรย์นั้นโดยไม่ทราบว่ามีกุญแจสำหรับมันฉันจะทำอย่างไร มีฟังก์ชั่นนี้หรือไม่?
คำตอบ:
reset()
ให้ค่าแรกของอาร์เรย์หากคุณมีองค์ประกอบอยู่ภายในอาร์เรย์:
$value = reset($array);
นอกจากนี้ยังให้คุณFALSE
ในกรณีที่อาร์เรย์ว่างเปล่า
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
ถ้าคุณไม่รู้เกี่ยวกับอาเรย์มากพอ (คุณไม่แน่ใจว่าคีย์แรกเป็นฟูหรือบาร์ ) ดังนั้นอาเรย์ก็น่าจะว่างเปล่าเช่นกัน
ดังนั้นจะเป็นการดีที่สุดที่จะตรวจสอบโดยเฉพาะอย่างยิ่งหากมีโอกาสที่ค่าที่ส่งคืนอาจเป็นบูลีน FALSE:
$value = empty($arr) ? $default : reset($arr);
โค้ดด้านบนใช้reset
และมีผลข้างเคียง (มันรีเซ็ตตัวชี้ภายในของอาร์เรย์) ดังนั้นคุณอาจต้องการใช้array_slice
เพื่อเข้าถึงสำเนาขององค์ประกอบแรกของอาร์เรย์อย่างรวดเร็ว:
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
สมมติว่าคุณต้องการรับทั้งคีย์และค่าแยกกันคุณต้องเพิ่มพารามิเตอร์ตัวที่สี่ในarray_slice
:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
วิธีรับไอเท็มแรกเป็นคู่ ( key => value
):
$item = array_slice($arr, 0, 1, true);
การดัดแปลงอย่างง่ายเพื่อรับไอเท็มสุดท้ายคีย์และค่าแยก:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
หากอาร์เรย์ไม่ใหญ่จริง ๆ คุณไม่ต้องการarray_slice
และสามารถรับสำเนาของคีย์ทั้งหมดจากนั้นรับไอเท็มแรก:
$key = count($arr) ? array_keys($arr)[0] : null;
หากคุณมีอาเรย์ขนาดใหญ่มากการเรียกarray_keys
ใช้จะต้องใช้เวลาและหน่วยความจำมากกว่านั้นarray_slice
(ทั้งสองฟังก์ชั่นจะเดินไปที่อาเรย์
ข้อยกเว้นที่น่าสังเกตคือเมื่อคุณมีคีย์แรกซึ่งชี้ไปยังวัตถุที่มีขนาดใหญ่และซับซ้อน ในกรณีarray_slice
นั้นจะทำซ้ำวัตถุขนาดใหญ่ชิ้นแรกในขณะที่array_keys
จะหยิบกุญแจเท่านั้น
PHP 7.3 การดำเนินการเช่นเดียวกับarray_key_first()
array_key_last()
สิ่งเหล่านี้มีไว้เพื่อเข้าถึงคีย์แรกและคีย์สุดท้ายอย่างมีประสิทธิภาพโดยไม่ต้องรีเซ็ตสถานะภายในของอาเรย์เป็นผลข้างเคียง
ดังนั้นใน PHP 7.3 ค่าแรกของ$array
อาจถูกเข้าถึงด้วย
$array[array_key_first($array)];
คุณยังตรวจสอบได้ดีขึ้นว่าอาร์เรย์ไม่ว่างเปล่าหรือคุณจะได้รับข้อผิดพลาด:
$firstKey = array_key_first($array);
if (null === $firstKey) {
$value = "Array is empty"; // An error should be handled here
} else {
$value = $array[$firstKey];
}
การวนซ้ำที่ผิดพลาดในรอบแรก:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
หรือใช้each()
( คำเตือน: เลิกใช้ตั้งแต่ PHP 7.2.0 ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
reset()
ฟังก์ชั่นเท่านั้นที่จะเรียกค่าแรก
มีตัวเลือกน้อย array_shift()
จะส่งคืนองค์ประกอบแรก แต่จะลบองค์ประกอบแรกออกจากอาร์เรย์ด้วย
$first = array_shift($array);
current()
จะคืนค่าอาร์เรย์ที่ตัวชี้หน่วยความจำภายในชี้ไปซึ่งเป็นองค์ประกอบแรกตามค่าเริ่มต้น
$first = current($array);
reset()
หากคุณต้องการให้แน่ใจว่ามันจะชี้ไปที่องค์ประกอบแรกคุณก็สามารถใช้
reset($array);
$first = current($array);
reset()
จริง ๆ แล้วส่งคืนองค์ประกอบดังนั้นตามด้วย$first = current($array)
ซ้ำซ้อน
เพื่อให้เรามีตัวเลือกอื่น ๆ : reset($arr);
ดีพอถ้าคุณไม่พยายามเก็บตัวชี้อาร์เรย์ไว้และด้วยอาร์เรย์ขนาดใหญ่มากมันจะมีค่าใช้จ่ายน้อยที่สุด ที่กล่าวว่ามีปัญหาบางอย่างกับมัน:
$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.
วิธีการทำเช่นนี้โดยไม่เปลี่ยนพอยน์เตอร์:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
ประโยชน์ของการ$arr[reset(array_keys($arr))];
ที่มันจะเพิ่มคำเตือนถ้าอาร์เรย์ว่างเปล่าจริง
ทดสอบว่าตัวแปรเป็นอาร์เรย์ก่อนรับองค์ประกอบแรกหรือไม่ เมื่อสร้างอาร์เรย์แบบไดนามิกถ้าตั้งค่าเป็นโมฆะคุณจะได้รับข้อผิดพลาด
ตัวอย่างเช่น:
if(is_array($array))
{
reset($array);
$first = key($array);
}
เราทำได้
$first = reset($array);
แทน
reset($array);
$first = current($array);
เช่น reset()
ส่งกลับองค์ประกอบแรกของอาร์เรย์หลังจากรีเซ็ต;
คุณสามารถทำได้:
$values = array_values($array);
echo $values[0];
ใช้ฟังก์ชั่นรีเซ็ต () เพื่อดึงไอเท็มแรกออกจากอาร์เรย์นั้นโดยไม่ต้องรู้รหัสสำหรับสิ่งนี้
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
เอาต์พุต // 400
คุณสามารถลองสิ่งนี้
ในการรับค่าแรกของอาร์เรย์: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
เพื่อรับคีย์แรกของอาร์เรย์
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
ฉันทำสิ่งนี้เพื่อรับค่าแรกและค่าสุดท้าย ใช้งานได้กับค่ามากขึ้นเช่นกัน
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
เริ่มต้นด้วยPHP 7.3.0เป็นไปได้ที่จะทำโดยไม่ต้องรีเซ็ตตัวชี้ภายใน array_key_first
คุณจะใช้ หากคุณแน่ใจว่าอาร์เรย์ของคุณมีค่าอยู่คุณก็สามารถทำได้:
$first = $array[array_key_first($array)];
มีโอกาสมากขึ้นที่คุณจะต้องจัดการกับกรณีที่อาร์เรย์ว่างเปล่า:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
$array[0]
คุณก็สามารถใช้ มันจะให้รายการแรกเสมอ