บางคำตอบที่ดี แต่แค่คิดว่าฉันจะขยายเล็กน้อยเพื่ออธิบายให้ชัดเจนยิ่งขึ้นเมื่อ PHP พิจารณาว่าอาร์เรย์ว่างเปล่าหรือไม่
หมายเหตุหลัก:
อาร์เรย์ที่มีคีย์ (หรือคีย์) จะถูกกำหนดเป็นค่าว่างโดย PHP
เนื่องจากค่าอาร์เรย์ต้องการคีย์ที่มีอยู่การมีค่าหรือไม่อยู่ในอาร์เรย์จะไม่พิจารณาว่าเป็นค่าว่างหรือไม่หากไม่มีคีย์ (และไม่มีค่า)
ดังนั้นการตรวจสอบอาเรย์ด้วยempty()
ไม่เพียงแค่บอกคุณว่าคุณมีค่าหรือไม่มันจะบอกคุณว่าอาเรย์นั้นว่างเปล่าหรือไม่และกุญแจเป็นส่วนหนึ่งของอาเรย์
ดังนั้นให้พิจารณาว่าคุณผลิตอาเรย์ของคุณอย่างไรก่อนตัดสินใจเลือกวิธีการตรวจสอบที่จะใช้
EG อาร์เรย์จะมีคีย์เมื่อผู้ใช้ส่งแบบฟอร์ม HTML ของคุณเมื่อแต่ละเขตข้อมูลฟอร์มมีชื่ออาร์เรย์ (เช่นname="array[]"
)
อาเรย์ที่ไม่ว่างเปล่าจะถูกสร้างขึ้นสำหรับแต่ละฟิลด์เนื่องจากจะมีการเพิ่มค่าคีย์อัตโนมัติสำหรับอาเรย์ของแต่ละเขตข้อมูลฟอร์ม
ใช้อาร์เรย์เหล่านี้เช่น:
/* Assigning some arrays */
// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");
// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";
// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';
หากคุณสะท้อนคีย์และค่าของอาร์เรย์สำหรับอาร์เรย์ข้างต้นคุณจะได้รับสิ่งต่อไปนี้:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
สาม ARRAY:
[0] => []
[1] => []
และการทดสอบอาร์เรย์ข้างต้นด้วยempty()
ผลตอบแทนต่อไปนี้:
ARRAY ONE:
$ ArrayOne ไม่ว่างเปล่า
ARRAY TWO:
$ ArrayTwo ไม่ว่างเปล่า
สาม ARRAY:
$ ArrayThree ไม่ว่างเปล่า
อาเรย์จะว่างเปล่าเสมอเมื่อคุณกำหนดอาเรย์ แต่อย่าใช้อาเรย์นั้นหลังจากนั้นเช่น
$ArrayFour = array();
สิ่งนี้จะว่างเปล่าเช่น PHP จะส่งกลับค่า TRUE เมื่อใช้ถ้าempty()
ด้านบน
ดังนั้นถ้าคุณมีอาร์เรย์กุญแจ - ทั้งโดยการเช่นรูปแบบของการป้อนข้อมูลชื่อหรือถ้าคุณกำหนดด้วยตนเอง (เช่นสร้างอาร์เรย์ที่มีชื่อคอลัมน์ฐานข้อมูลเป็นกุญแจ แต่ค่าที่ไม่มี / ข้อมูลจากฐานข้อมูล) empty()
จากนั้นอาร์เรย์จะไม่ได้รับ
ในกรณีนี้คุณสามารถวนลูปอาร์เรย์ใน foreach โดยทดสอบว่าแต่ละคีย์มีค่าหรือไม่ นี่เป็นวิธีการที่ดีถ้าคุณต้องใช้อาเรย์ด้วยซ้ำบางทีตรวจสอบคีย์หรือฆ่าเชื้อข้อมูล
แต่มันไม่ได้เป็นวิธีที่ดีที่สุดถ้าคุณเพียงแค่ต้องรู้ว่า "ถ้าค่าอยู่" ผลตอบแทนจริงหรือเท็จ มีวิธีการต่าง ๆ เพื่อตรวจสอบว่าอาร์เรย์มีค่าใด ๆ เมื่อมันรู้ว่ามันจะมีคีย์ ฟังก์ชั่นหรือคลาสอาจเป็นวิธีที่ดีที่สุด แต่ขึ้นอยู่กับสภาพแวดล้อมและข้อกำหนดที่แน่นอนของคุณเช่นเดียวกับสิ่งอื่น ๆ เช่นสิ่งที่คุณทำกับอาเรย์ในปัจจุบัน (ถ้ามี)
นี่คือวิธีการที่ใช้รหัสน้อยมากเพื่อตรวจสอบว่าอาร์เรย์มีค่าหรือไม่:
การใช้array_filter()
:
วนซ้ำค่าแต่ละค่าในอาร์เรย์ที่ส่งไปยังฟังก์ชันการเรียกกลับ หากฟังก์ชันการเรียกกลับส่งคืนค่าจริงค่าปัจจุบันจากอาร์เรย์จะถูกส่งกลับไปยังอาร์เรย์ผลลัพธ์ คีย์อาร์เรย์ถูกเก็บรักษาไว้
$EmptyTestArray = array_filter($ArrayOne);
if (!empty($EmptyTestArray))
{
// do some tests on the values in $ArrayOne
}
else
{
// Likely not to need an else,
// but could return message to user "you entered nothing" etc etc
}
วิ่ง array_filter()
อาร์เรย์ตัวอย่างทั้งสาม (สร้างขึ้นในบล็อครหัสแรกในคำตอบนี้) จะส่งผลให้เกิดสิ่งต่อไปนี้:
อาเรย์ ONE:
$ arrayone ไม่ว่างเปล่า
อาเรย์สอง:
อาร์เรย์ $ arraytwo ไม่ว่างเปล่า
สาม ARRAY:
$ arraythree ว่างเปล่า
ดังนั้นเมื่อไม่มีค่าไม่ว่าจะมีคีย์หรือไม่ใช้array_filter()
เพื่อสร้างอาร์เรย์ใหม่แล้วตรวจสอบว่าอาร์เรย์ใหม่ว่างเปล่าแสดงว่ามีค่าใด ๆ ในอาร์เรย์เดิมหรือไม่
มันไม่เหมาะและยุ่งเล็กน้อย แต่ถ้าคุณมีอาเรย์ขนาดใหญ่และไม่จำเป็นต้องวนซ้ำมันด้วยเหตุผลอื่นใดนี่เป็นวิธีที่ง่ายที่สุดในเรื่องของรหัสที่จำเป็น
ฉันไม่มีประสบการณ์ในการตรวจสอบค่าโสหุ้ย แต่จะเป็นการดีที่จะทราบความแตกต่างระหว่างการใช้งานarray_filter()
และforeach
ตรวจสอบหากพบว่ามีค่า
มาตรฐานแน่นอนจะต้องอยู่ในพารามิเตอร์ต่าง ๆ ในอาร์เรย์ขนาดเล็กและขนาดใหญ่และเมื่อมีค่าและไม่เป็นต้น