การตรวจสอบอาร์เรย์ว่าง: count vs empty


99

คำถามเกี่ยวกับ ' จะทราบได้อย่างไรว่าอาร์เรย์ PHP ว่างเปล่า ' ทำให้ฉันนึกถึงคำถามนี้

มีเหตุผลที่countควรใช้แทนemptyเมื่อพิจารณาว่าอาร์เรย์ว่างหรือไม่?

ความคิดส่วนตัวของฉันคือถ้า 2 เทียบเท่ากับกรณีของอาร์เรย์ว่างที่คุณควรใช้emptyเพราะมันให้คำตอบแบบบูลีนสำหรับคำถามบูลีน จากคำถามที่เชื่อมโยงข้างต้นดูเหมือนว่าcount($var) == 0จะเป็นวิธีที่นิยม สำหรับฉันในขณะที่ความถูกต้องทางเทคนิคก็ไม่สมเหตุสมผล เช่นQ: $ var คุณว่างไหม ตอบ: 7 . อืม ...

มีเหตุผลที่ฉันควรใช้count == 0แทนหรือแค่เรื่องรสนิยมส่วนตัว?

ตามที่ผู้อื่นระบุไว้ในความคิดเห็นสำหรับคำตอบที่ถูกลบไปแล้วcountจะมีผลกระทบต่อประสิทธิภาพสำหรับอาร์เรย์ขนาดใหญ่เนื่องจากจะต้องนับองค์ประกอบทั้งหมดในขณะที่emptyสามารถหยุดได้ทันทีที่รู้ว่าไม่ว่างเปล่า ดังนั้นหากให้ผลลัพธ์เหมือนกันในกรณีนี้ แต่countอาจไม่มีประสิทธิภาพทำไมเราถึงใช้count($var) == 0?


ฉันสมมติว่าคุณตั้งใจที่จะ จำกัด การสนทนาไว้เฉพาะอาร์เรย์เท่านั้น แต่อาจเป็นที่น่าสังเกตว่าเกมจะเปลี่ยนไปอย่างสมบูรณ์หากคุณกำลังทำงานกับวัตถุ (เช่นที่ใช้ Countable, Iterator เป็นต้น)

9
อาร์เรย์ว่างเท่ากับfalseใน PHP - ไม่จำเป็นต้องไม่มีหรือempty() count()
Cobby

@Cobby Code ได้โปรด
TheRealChx101

@ TheRealChx101 เช่นเดียวกับ: if (!$myArray) { echo "array is empty"; } sandbox.onlinephpfunctions.com/code/…
Cobby

empty()ปัจจุบันตัวเลือกที่นิยมในคำถามที่เชื่อมโยงใช้
PhoneixS

คำตอบ:


99

ฉันมักจะใช้empty. ฉันไม่แน่ใจว่าทำไมผู้คนถึงใช้การนับจริงๆ - หากอาร์เรย์มีขนาดใหญ่การนับจะใช้เวลานานขึ้น / มีค่าโสหุ้ยมากกว่า หากคุณต้องการทราบว่าอาร์เรย์ว่างหรือไม่ให้ใช้ค่าว่าง


4
ฟังก์ชันเหล่านี้แตกต่างกันอย่างแน่นอนเมื่ออาร์เรย์ไม่ว่างเปล่า
Jacco

2
@Jacco: ฉันไม่ได้โต้แย้งว่า แต่ถ้าคุณกำลังทดสอบว่ามันว่างเปล่าฉันไม่เห็นว่ามันมีความเกี่ยวข้องอะไร - เป็นคำถามที่มีผลลัพธ์บูลีนซึ่งเป็นสิ่งที่ฟังก์ชันจะกลับ เกี่ยวกับสิ่งที่ถือว่าว่างเปล่าโดยไม่ได้ดูว่าเกณฑ์เหล่านั้นจะให้คำตอบที่ผิดอย่างไรเว้นแต่ว่าการทดสอบ var ของคุณไม่ใช่อาร์เรย์ซึ่งในกรณีนี้เป็นปัญหาที่แตกต่างกันอย่างสิ้นเชิง
prodigitalson

23
@prodigitalson ฉันจะบอกว่า count คือO(1)เนื่องจาก PHP เก็บจำนวนองค์ประกอบไว้ภายใน ลองดูคำตอบนี้stackoverflow.com/a/5835419/592454
elitalon

4
@eliton: แต่ก็ยัง - แม้ว่าประสิทธิภาพจะไม่มีหรือแตกต่างกันเล็กน้อยทำไมต้องใช้การนับถ้าคุณไม่ต้องการการนับ
prodigitalson

4
ว่างเปล่า () เกินกว่าจะให้อภัยข้อผิดพลาด ฉันใช้เวลาเพียง 2 ชั่วโมงในการดีบักคลาสย่อยที่ทดสอบค่าว่าง () ในตัวแปรสมาชิกส่วนตัวของซูเปอร์คลาส (ขอบเขตของตัวแปรสมาชิกของซูเปอร์คลาสควรได้รับการป้องกัน แต่ค่าว่าง () กลับไม่มีข้อผิดพลาด - ผลลัพธ์ก็คือสิ่งที่ควร ได้เกิดขึ้นไม่ได้เกิดขึ้น: การไม่มีอยู่ของตัวแปรสมาชิกในคลาสย่อยได้รับการปฏิบัติในลักษณะเดียวกับที่ตัวแปรสมาชิกนี้อาร์เรย์ว่างเปล่ากล่าวคือราวกับว่าไม่มีองค์ประกอบ) นี่เป็นปัญหาและอีกตัวอย่างหนึ่งของ PHP ที่ไม่น่าให้อภัย
Matthew Slyman

47

ฉันอยากรู้ว่าอันไหนเร็วกว่ากันจริงฉันจึงสร้างสคริปต์ง่ายๆเพื่อเปรียบเทียบฟังก์ชันเหล่านั้น

<?php

function benchmark($name, $iterations, $action){
    $time=microtime(true);
    for($i=0;$i<=$iterations;++$i){
        $action();
    }
    echo $name . ' ' . round(microtime(true)-$time, 6) . "\n";
}

$iterations = 1000000;
$x = array();
$y = range(0, 10000000);
$actions = array(
    "Empty empty()" => function() use($x){
        empty($x);
    },
    "Empty count()" => function() use($x){
        count($x);
    },
    "Full empty()" => function() use($y){
        empty($y);
    },
    "Full count()" => function() use($y){
        count($y);
    },
    ############
    "IF empty empty()" => function() use($x){
        if(empty($x)){ $t=1; }
    },
    "IF empty count()" => function() use($x){
        if(count($x)){ $t=1; }
    },
    "IF full empty()" => function() use($y){
        if(empty($y)){ $t=1; }
    },
    "IF full count()" => function() use($y){
        if(count($y)){ $t=1; }
    },
    ############
    "OR empty empty()" => function() use($x){
        empty($x) OR $t=1;
    },
    "OR empty count()" => function() use($x){
        count($x) OR $t=1;
    },
    "OR full empty()" => function() use($y){
        empty($y) OR $t=1;
    },
    "OR full count()" => function() use($y){
        count($y) OR $t=1;
    },
    ############
    "IF/ELSE empty empty()" => function() use($x){
        if(empty($x)){ $t=1; } else { $t=2; }
    },
    "IF/ELSE empty count()" => function() use($x){
        if(count($x)){ $t=1; } else { $t=2; }
    },
    "IF/ELSE full empty()" => function() use($y){
        if(empty($y)){ $t=1; } else { $t=2; }
    },
    "IF/ELSE full count()" => function() use($y){
        if(count($y)){ $t=1; } else { $t=2; }
    },
    ############
    "( ? : ) empty empty()" => function() use($x){
        $t = (empty($x) ? 1 : 2);
    },
    "( ? : ) empty count()" => function() use($x){
        $t = (count($x) ? 1 : 2);
    },
    "( ? : ) full empty()" => function() use($y){
        $t = (empty($y) ? 1 : 2);
    },
    "( ? : ) full count()" => function() use($y){
        $t = (count($y) ? 1 : 2);
    }
);

foreach($actions as $name => $action){
    benchmark($name, $iterations, $action);
}
//END

ตั้งแต่ฉันทำมันฉันก็พยายามตรวจสอบประสิทธิภาพการดำเนินการที่ปกติจะเกี่ยวข้องกับ count () / empty ()

ใช้ PHP 5.4.39:

Empty empty() 0.118691
Empty count() 0.218974
Full empty() 0.133747
Full count() 0.216424
IF empty empty() 0.166474
IF empty count() 0.235922
IF full empty() 0.120642
IF full count() 0.248273
OR empty empty() 0.123875
OR empty count() 0.258665
OR full empty() 0.157839
OR full count() 0.224869
IF/ELSE empty empty() 0.167004
IF/ELSE empty count() 0.263351
IF/ELSE full empty() 0.145794
IF/ELSE full count() 0.248425
( ? : ) empty empty() 0.169487
( ? : ) empty count() 0.265701
( ? : ) full empty() 0.149847
( ? : ) full count() 0.252891

การใช้ HipHop VM 3.6.1 (dbg)

Empty empty() 0.210652
Empty count() 0.212123
Full empty() 0.206016
Full count() 0.204722
IF empty empty() 0.227852
IF empty count() 0.219821
IF full empty() 0.220823
IF full count() 0.221397
OR empty empty() 0.218813
OR empty count() 0.220105
OR full empty() 0.229118
OR full count() 0.221787
IF/ELSE empty empty() 0.221499
IF/ELSE empty count() 0.221274
IF/ELSE full empty() 0.221879
IF/ELSE full count() 0.228737
( ? : ) empty empty() 0.224143
( ? : ) empty count() 0.222459
( ? : ) full empty() 0.221606
( ? : ) full count() 0.231288

ข้อสรุปหากคุณใช้ PHP:

  1. empty () เร็วกว่า count () มากในทั้งสองสถานการณ์โดยมีอาร์เรย์ว่างและมีการเติมข้อมูล

  2. count () ดำเนินการเดียวกันกับอาร์เรย์เต็มหรือว่างเปล่า

  3. การทำ IF อย่างง่ายหรือเพียงแค่การดำเนินการบูลีนก็เหมือนกัน

  4. IF / ELSE มีประสิทธิภาพมากกว่า (?:) เล็กน้อย เว้นแต่ว่าคุณจะทำซ้ำหลายพันล้านครั้งด้วยนิพจน์ที่อยู่ตรงกลางมันก็ไม่มีนัยสำคัญอย่างสิ้นเชิง

ข้อสรุปหากคุณใช้ HHVM:

  1. empty () เป็นบิตเล็ก ๆ ที่เร็วกว่า count () แต่ไม่มีนัยสำคัญเช่นนั้น

    [ส่วนที่เหลือเหมือนกับใน PHP]

ในตอนท้ายของข้อสรุปหากคุณต้องการทราบว่าอาร์เรย์ว่างเปล่าให้ใช้ empty ();

นี่เป็นเพียงการทดสอบที่น่าสงสัยที่ทำได้โดยไม่ต้องคำนึงถึงหลายสิ่ง เป็นเพียงการพิสูจน์แนวคิดและอาจไม่สะท้อนถึงการดำเนินงานในการผลิต


ขอบคุณสำหรับโค้ดการทดสอบตัวอย่าง .... ฉันเพิ่งใช้และพบว่าif($x){เร็วกว่าif(empty($x)){(ใช้ได้เฉพาะเมื่อคุณรู้ว่า$xมีการประกาศ)
Redzarf

รหัสทดสอบของคุณแย่มาก คุณได้เพิ่มสิ่งต่างๆมากมายเช่นการเรียกใช้ฟังก์ชันแบบไม่ระบุตัวตน ถ้าฉันลบออกและฉันเพิ่งเรียกใช้โค้ดเปล่า (สำหรับการวนซ้ำกัน) ฉันจะได้รับความแตกต่างอย่างมาก และฉันหมายความว่าในกรณีนี้จะยิ่งเร็วขึ้นถ้าไม่มีcountและemptyเรียกในคำสั่ง if จากนั้นก็จะมาและกินเวลาempty countแต่เมื่อเทียบกับของคุณในกรณีเปล่าช่องว่างนั้นเร็วกว่าสิบเท่า! การทดสอบอาร์เรย์อย่างง่าย: 0.104662 ว่าง: 0.177659 จำนวน: 1.175125 บน PHP 5.6 มิฉะนั้นโค้ดของคุณจะให้ผลลัพธ์เดียวกันกับเวอร์ชันนี้เช่นเดียวกับที่คุณกล่าวถึง เพียงแค่ผลปลอม
golddragon007

16

ผมคิดว่ามันเป็นเพียงความชอบส่วนบุคคลเท่านั้น บางคนอาจบอกว่าemptyเร็วกว่า (เช่นhttp://jamessocol.com/projects/count_vs_empty.php ) ในขณะที่บางคนอาจบอกว่าcountดีกว่าเนื่องจากเดิมสร้างขึ้นสำหรับอาร์เรย์ emptyมีความกว้างมากขึ้นและสามารถนำไปใช้กับประเภทอื่นได้

php.net ให้คำเตือนต่อไปนี้countแม้ว่า:

count () อาจส่งคืน 0 สำหรับตัวแปรที่ไม่ได้ตั้งค่า แต่อาจส่งคืน 0 สำหรับตัวแปรที่เริ่มต้นด้วยอาร์เรย์ว่าง ใช้ isset () เพื่อทดสอบว่ามีการตั้งค่าตัวแปรหรือไม่

กล่าวอีกนัยหนึ่งหากไม่ได้ตั้งค่าตัวแปรคุณจะได้รับแจ้งจาก PHP ว่าไม่ได้กำหนด ดังนั้นก่อนที่จะใช้มันจะดีกว่าที่จะตรวจสอบตัวแปรที่มีcount issetไม่จำเป็นกับempty.


3
เป็นเรื่องที่น่าสนใจที่อาร์กิวเมนต์ที่ชอบcountคือเดิมสร้างขึ้นสำหรับอาร์เรย์ ... แต่อ็อบเจ็กต์สามารถนำไปใช้งานCountableได้และคุณสามารถส่งผ่านค่าสเกลาร์ไปยังcount()และรับผลลัพธ์ที่ถูกต้องได้

1
count () อาจกลับ 0 สำหรับตัวแปรที่ไม่ได้ตั้ง แต่มันอาจจะยัง ... เอกสารอย่างเป็นทางการโดยใช้กริยาช่วยในการแสดงความไม่แน่นอน: p
nawfal

แค่คอมเม้นตรงisset()ประเด็น หากคุณกังวลเกี่ยวกับการแจ้งเตือนใน PHP คุณควรประกาศอาร์เรย์ของคุณแล้ว หากคุณปล่อยให้ PHP ประกาศอาร์เรย์ของคุณแบบไดนามิกคุณจะได้รับการแจ้งเตือน ณ จุดนั้นเช่นกัน ฉันคิดว่าจุดที่แท้จริงของคำเตือนบน php.net คือคุณไม่ควรใช้countเพื่อพิจารณาว่าอาร์เรย์ถูกประกาศหรือไม่เนื่องจากให้ผลลัพธ์เหมือนกับอาร์เรย์ว่างเปล่า
Noah Duncan

12

มีเหตุผลที่ควรใช้ count แทนการว่างเปล่าเมื่อพิจารณาว่าอาร์เรย์ว่างหรือไม่?

มีอยู่เมื่อคุณต้องการทำบางสิ่งในอาร์เรย์ที่ไม่ว่างเปล่าโดยรู้ว่ามันมีขนาด:

if( 0 < ( $cnt = count($array) ) )
{
 echo "Your array size is: $cnt";
}
else
 echo "Too bad, your array is empty :(";

แต่ฉันไม่แนะนำให้ใช้ count เว้นแต่คุณจะแน่ใจ 100% ว่าสิ่งที่คุณกำลังนับคืออาร์เรย์ เมื่อเร็ว ๆ นี้ฉันได้ทำการดีบักโค้ดโดยที่ฟังก์ชัน error กำลังส่งคืนFALSEแทนที่จะเป็นอาร์เรย์ว่างเปล่าและสิ่งที่ฉันค้นพบคือ:

var_dump(count(FALSE));

เอาต์พุต:

int 1

ตั้งแต่นั้นมาฉันใช้emptyหรือif(array() === $array)แน่ใจว่าฉันมีอาร์เรย์ที่ว่างเปล่า


6

count()ArrayAccess/Countableดูเหมือนว่าจะทำงานได้ดีขึ้นกับอาร์เรย์เหมือนอินเตอร์เฟซที่ใช้ empty()คืนค่าจริงสำหรับอ็อบเจ็กต์ประเภทนี้แม้ว่าจะไม่มีองค์ประกอบก็ตาม โดยปกติคลาสเหล่านี้จะใช้Countableอินเทอร์เฟซดังนั้นหากคำถามคือ "คอลเล็กชันนี้มีองค์ประกอบหรือไม่" โดยไม่ต้องตั้งสมมติฐานเกี่ยวกับการนำไปใช้จึงcount()เป็นตัวเลือกที่ดีกว่า


คุณหมายถึง " emptyคืนค่าเท็จสำหรับวัตถุประเภทนี้แม้ว่าจะไม่มีองค์ประกอบ"
alexw

ใช่. ไม่มีอินเทอร์เฟซที่อนุญาตให้คลาสกำหนดว่าเป็น "ว่าง" หรือไม่ และมันไม่สมเหตุสมผลเลยที่จะมี
Ryan

+1 การใช้countจะเป็นวิธีแก้ปัญหาที่ยืดหยุ่นและขยายได้มากขึ้นหากมันสมเหตุสมผลที่รหัสของคุณจะยอมรับคอลเล็กชันที่ใช้วิธี "ทั่วไป" ... IMO ที่อาจเป็นเกณฑ์ที่เกี่ยวข้องเพียงเกณฑ์เดียวในการกำหนดว่าคุณใช้countหรือวิธีอื่น ...
ClemC

ข้อเสียอย่างมากcount()ของ 7.2 คือไม่สามารถใช้ตัวแปรว่างได้อีกต่อไป
Ryan

5

หรือคุณสามารถใช้ตัวแปรเป็นบูลีนได้ (โดยปริยายหรือโดยชัดแจ้ง):

if( $value )
{
  // array is not empty
}

if( (bool) $value )
{
  // array is still not empty
}

วิธีการนี้จะไม่สร้างถ้าตัวแปรไม่ได้กำหนดไว้เช่นเดียวกันกับE_NOTICEcount()

สำหรับข้อมูลเพิ่มเติมโปรดดูที่PHP ที่หน้าคู่มือการใช้งานกับการเปรียบเทียบประเภท


1
นี่เป็นวิธีที่ดีที่สุดในการตรวจสอบใช้เฉพาะในempty()กรณีที่คุณพยายามหลีกเลี่ยงการเรียก E_NOTICE อย่างชัดเจน (ซึ่งโดยทั่วไปเป็นความคิดที่ไม่ดี IMO) การใช้ช่องว่างอย่างโจ่งแจ้งจะนำไปสู่รหัสบั๊กกี้
Cobby

3

ความชอบส่วนตัวของฉันคือความสง่างามในการเข้ารหัสมากกว่า (เกี่ยวกับกรณีการใช้งานเฉพาะของฉัน) ฉันเห็นด้วยกับ Dan McG ในกรณีที่ count () ไม่ตอบสนองด้วยประเภทข้อมูลที่ถูกต้อง (ในกรณีนี้คือบูลีน) สำหรับการทดสอบที่เป็นปัญหาบังคับให้นักพัฒนาต้องเขียนโค้ดเพิ่มเติมเพื่อเติมคำสั่ง 'if'

สิ่งนี้มีผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพหรือไม่นั้นเป็นที่ถกเถียงกันสำหรับอาร์เรย์ขนาดใหญ่มากเท่านั้น (ซึ่งคุณอาจไม่มีการจัดสรรหน่วยความจำเพียงพอสำหรับการตั้งค่าส่วนใหญ่)

โดยเฉพาะอย่างยิ่งเมื่อพูดถึงอาร์เรย์ $ _POST ของ PHP ดูเหมือนว่าจะมี "ตรรกะ" มากกว่าในความคิดของฉันที่จะเขียน / ดู:

if ( !empty ( $_POST ) ) {
    // deal with postdata
}

3

หวังว่านี่อาจช่วยใครบางคนได้แม้ว่าจะได้รับคำตอบแล้วก็ตาม (และถกเถียงกันอยู่บ้าง) ในสถานการณ์ของฉันเองฉันรู้ว่าอาร์เรย์ทั้งหมดของฉันทั้งหมดมี 7 องค์ประกอบ (มีการตรวจสอบก่อนหน้านี้ในโค้ดของฉัน) และฉันกำลังดำเนินการarray_diffซึ่งแน่นอนว่าจะส่งคืนอาร์เรย์เป็นศูนย์เมื่อเท่ากัน

ผมมี 34 วินาทีสำหรับcountและ 17 emptyวินาทีสำหรับ ทั้งสองให้การคำนวณเหมือนกันดังนั้นรหัสของฉันจึงยังใช้ได้

อย่างไรก็ตามคุณสามารถลองใช้==หรือ===ในPHP ได้ - ตรวจสอบว่าอาร์เรย์สองอาร์เรย์เท่ากันหรือไม่ สิ่งที่ดีที่สุดที่ฉันจะบอกคือ try countvs emptyvs == empty arrayแล้วดูว่าตัวไหนให้ perfs ที่ดีที่สุดของคุณเอง ในกรณีของฉันcountช้าที่สุดดังนั้นฉันemptyจึงใช้ตอนนี้ ... จะตรวจสอบserializeต่อไป


2

ไม่มีเหตุผลที่ดีที่จะชอบเป็นมากกว่าcount($myArray) == 0 empty($myArray)พวกเขามีความหมายเหมือนกัน บางคนอาจพบว่าอ่านได้มากกว่าอีกอันหนึ่ง หนึ่งอาจทำงานได้ดีกว่าอีกเล็กน้อย แต่ก็ไม่น่าจะเป็นปัจจัยสำคัญในแอปพลิเคชัน php ส่วนใหญ่ สำหรับวัตถุประสงค์ในทางปฏิบัติทั้งหมดทางเลือกเป็นเรื่องของรสนิยม


1
แล้ว "ประสิทธิภาพ" ล่ะ? การใช้คำอธิบาย "จุดประสงค์เชิงปฏิบัติ" ทำให้เกิดนิสัยที่ไม่ดี ใช้countเมื่อคุณต้องการนับใช้emptyเมื่อคุณต้องการตรวจสอบว่าคอลเลกชันว่างเปล่า แน่นอนว่ามีขอบกรณีเช่นสตริงหรือค่าว่าง แต่โปรแกรมเมอร์ต้องคิดถึงรหัสของเขา คุณอาจไม่เห็นด้วยคุณได้รับอนุญาต
Namek

บางครั้งด้วย count ($ myArray) ถ้า $ myArray เป็นบูลีนเหมือนค่า FALSE การนับจะไม่ทำงาน (ทดสอบบน php5.3)
Mimouni

1

บางครั้งการใช้ที่ว่างเปล่าเป็นสิ่งที่จำเป็น ตัวอย่างเช่นรหัสนี้:

$myarray = array();

echo "myarray:"; var_dump($myarray); echo "<br>";
echo "case1 count: ".count($myarray)."<br>";
echo "case1 empty: ".empty($myarray)."<br>";

$glob = glob('sdfsdfdsf.txt');

echo "glob:"; var_dump($glob); echo "<br>";
echo "case2 count: ".count($glob)."<br>";
echo "case2 empty: ".empty($glob);

หากคุณเรียกใช้รหัสนี้ในลักษณะนี้: http://phpfiddle.org/main/code/g9x-uwi

คุณจะได้รับผลลัพธ์นี้:

myarray:array(0) { } 
case1 count: 0
case1 empty: 1

glob:bool(false) 
case2 count: 1
case2 empty: 1

ดังนั้นถ้าคุณ countเอาท์พุทลูกโลกว่างคุณจะได้ผลลัพธ์ผิด คุณควรตรวจสอบความว่างเปล่า

จากเอกสารglob :

ส่งคืนอาร์เรย์ที่มีไฟล์ / ไดเร็กทอรีที่ตรงกันอาร์เรย์ว่างถ้าไม่มีไฟล์ที่ตรงกันหรือ FALSE บนข้อผิดพลาด
หมายเหตุ: ในบางระบบไม่สามารถแยกความแตกต่างระหว่างการจับคู่ว่างและข้อผิดพลาดได้

ตรวจสอบคำถามนี้ด้วย: เหตุใดจึงนับ (เท็จ) ส่งคืน 1


1

เนื่องจากตัวแปรที่แยกวิเคราะห์เป็นค่าลบจะส่งกลับ int(1)ด้วยcount()

ฉันชอบ ($array === [] || !$array)ทดสอบอาร์เรย์ว่าง

ใช่เราควรคาดหวังว่าอาร์เรย์ว่างเปล่า แต่เราไม่ควรคาดหวังว่าจะมีการใช้งานที่ดีกับฟังก์ชันโดยไม่บังคับประเภทผลตอบแทน

ตัวอย่างด้วย count()

var_dump(count(0));
> int(1)
var_dump(count(false));
> int(1)

0

ฉันทำให้จิตใจของฉันดีขึ้นขอบคุณ

ตกลงมีความแตกต่างระหว่างการใช้งานของไม่มีและempty countในทางเทคนิคcountควรใช้สำหรับอาร์เรย์และemptyสามารถใช้สำหรับอาร์เรย์เช่นเดียวกับสตริง ดังนั้นในกรณีส่วนใหญ่จะใช้แทนกันได้และหากคุณเห็นเอกสาร php คุณจะเห็นรายการคำแนะนำcountว่าคุณอยู่ที่emptyหรือในทางกลับกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.