วิธีใดที่ดีกว่าในการตรวจสอบว่าอาร์เรย์มีองค์ประกอบมากกว่าหนึ่งรายการหรือไม่


177

ฉันแค่ต้องตรวจสอบว่าอาร์เรย์มีองค์ประกอบมากกว่าหนึ่งรายการหรือไม่ ฉันพยายามทำเช่นนี้:

if (isset($arr['1']))

วิธีแบบดั้งเดิมอื่น ๆ คือ

if (sizeof($arr)>1)

สองอันไหนดีกว่ากัน? ในสถานการณ์เช่นนี้ฉันจะตัดสินระหว่างสองวิธีอื่นได้อย่างไร มีมิเตอร์ตรวจสอบประสิทธิภาพใดบ้างที่สามารถวัดได้ดีกว่า?


ข้อสันนิษฐานที่นี่คือ $ arr ได้รับการตรวจสอบความถูกต้องแล้วสำหรับอาเรย์แล้ว! นั่นหมายความว่าก่อนที่จะมาถึงสิ่งนี้หากตรวจสอบเงื่อนไขแล้วจะตรวจสอบแล้วว่าเป็นอาร์เรย์หรือไม่
tuxnani

คำตอบ:


342

ใช้สิ่งนี้

if (sizeof($arr) > 1) {
     ....
}

หรือ

if (count($arr) > 1) {
     ....
}

sizeof()เป็นนามแฝงสำหรับcount()พวกเขาทำงานเหมือนกัน

แก้ไข: ตอบส่วนที่สองของคำถาม: รหัสสองบรรทัดในคำถามไม่ใช่วิธีทางเลือก แต่จะทำหน้าที่ต่างกัน ครั้งแรกตรวจสอบว่าค่าที่$arr['1']ถูกตั้งค่าในขณะที่สองส่งกลับจำนวนขององค์ประกอบในอาร์เรย์


8
@NB: คำถามถูกแก้ไขแล้วรหัสเริ่มต้นif (sizeof($arr))ซึ่งแปลเป็นif (sizeof($arr) == 1)- ชัดเจนว่าไม่ได้ตรวจสอบว่าอาร์เรย์มีองค์ประกอบมากกว่าหนึ่งรายการหรือไม่ คำตอบนี้ถูกต้องและฉันไม่เห็นเหตุผลที่จะลงคะแนนดังนั้น upvote ของฉัน
Alix Axel

2
ฉันจะยอมรับว่าฉันไม่ได้ดูคำถามต้นฉบับซึ่งคำตอบนี้เป็นการตอบกลับ บริบทแตกต่างกันและฉันขอโทษที่ติดป้ายคำตอบว่าผิด มันไม่ผิดถ้าคุณดูคำถามเดิม มันไม่ดีสำหรับคำถามที่แก้ไขแล้ว
NB

ตัวอย่างรหัสที่สองในคำถามจะตรวจสอบว่ามีการตั้งค่าที่ $ arr ['1'] ไว้หรือไม่และไม่เกี่ยวข้องกับการนับ นี่ไม่ได้ระบุไว้ในคำตอบแค่คิดว่าฉันพูดถึงเรื่องนี้และหวังว่าผู้เขียนคำตอบจะอัปเดตคำตอบ :)
Anders M.

@AndersM ขอบคุณสำหรับการชี้ให้เห็นว่า ฉันสะท้อนออกมาในคำตอบ
Chibuzo

ฉันไม่ชอบ: <pre> <code> สำหรับดัชนีใน 0 .. <3 {Guard ให้ testTop: Prediciton = topPredictions [ดัชนี] อื่น {// วัตถุเริ่มต้นของคุณ} predictionResult.append (testTop)} </code> < / pre> ใน swift 4
Alex22

44

if(is_array($arr) && count($arr) > 1)

เพียงเพื่อให้แน่ใจว่า $ arr เป็นอาร์เรย์แน่นอน

sizeofเป็นนามแฝงของcountฉันชอบใช้นับเพราะ:

  1. พิมพ์อักขระได้น้อย 1 ตัว
  2. ขนาดของภาพรวมอย่างรวดเร็วอาจหมายถึงขนาดของอาร์เรย์ในแง่ของหน่วยความจำซึ่งเป็นเทคนิคเกินไป

@AlixAxel hmm แต่ถ้า $ arr เป็นสตริงการนับ ($ arr) จะคืนค่าจำนวนตัวอักษรของสตริงนั้นดังนั้น ya
Andreas Wong

ไม่มีถ้าเป็นสตริงก็จะกลับมา$arr 1
Alix Axel

12
จากคู่มือ: ส่งคืนจำนวนองค์ประกอบใน var ถ้า var ไม่ใช่อาร์เรย์หรือวัตถุที่มีอินเตอร์เฟสที่นับได้จะถูกส่งคืน 1 จะถูกส่งคืน มีข้อยกเว้นคือถ้า var เป็นโมฆะ 0 จะถูกส่งกลับ
Alix Axel

@AlixAxel โอ้ตกลง ... ว้าวขอบคุณไม่รู้ว่า: o ... ไม่ว่าในกรณีใดฉันจะปล่อยไว้ที่นั่นในกรณีที่ OP ต้องการแยกความแตกต่างระหว่าง String และ Array (ไม่ว่าจะมีขนาดเท่าใด) ขอบคุณสำหรับการชี้ นั้น :)
Andreas Wong

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()count()เป็นนามแฝงสำหรับ ทั้งทำงานร่วมกับอาร์เรย์ที่ไม่ได้ แต่พวกเขาจะกลับเฉพาะค่าที่มากกว่า 1 ถ้าอาร์กิวเมนต์เป็นอาร์เรย์หรือCountableวัตถุดังนั้นคุณค่อนข้างปลอดภัยกับเรื่องนี้


6

เห็นได้ชัดว่าการใช้count($arr) > 1( sizeofเป็นเพียงนามแฝงcount) เป็นทางออกที่ดีที่สุด อาจมีองค์ประกอบหลายอย่าง แต่ไม่มี$array['1']องค์ประกอบขึ้นอยู่กับโครงสร้างของอาร์เรย์ของคุณ



6

ฉันชอบcount()ฟังก์ชั่นแทนที่จะsizeOf()เป็นsizeOf()เพียงนามแฝงเท่านั้นcount()และไม่ได้มีความหมายเหมือนกันในภาษาอื่น ๆ อีกมากมาย โปรแกรมเมอร์หลายคนคาดว่าsizeof()จะคืนจำนวนหน่วยความจำที่จัดสรร


1
อธิบายยังที่นี่ stackoverflow.com/questions/3974385/php-array-count-or-sizeof นี้มีค่าตั้งแต่คำถามนี้อยู่ในขณะนี้บน Google ตีsizeofVScount
ทิมโอกิลวี่

4

สำหรับการตรวจสอบอาร์เรย์ว่างเปล่า () ดีกว่าขนาดของ ()

หากอาร์เรย์มีข้อมูลจำนวนมาก จะใช้เวลาในการนับขนาดของอาร์เรย์มากขึ้น แต่การตรวจสอบความว่างเปล่านั้นเป็นเรื่องง่ายเสมอ

//for empty
  if(!empty($array))
     echo 'Data exist';
  else 
     echo 'No data';


 //for sizeof
 if(sizeof($array)>1)
      echo 'Data exist';
 else 
    echo 'No data';

3

isset () จะตรวจสอบว่าตัวแปรถูกตั้งค่าไว้หรือไม่เท่านั้นโดยไม่เกี่ยวข้องกับขนาดหรือสิ่งที่มีอยู่ในอาร์เรย์


2

ฉันคิดว่า $ arr เป็นอาร์เรย์ดังนั้นนี่คือสิ่งที่คุณกำลังมองหา

if ( sizeof($arr) > 1) ...

1

วิธีแรก if (isset($arr['1'])) จะไม่ทำงานในอาเรย์แบบเชื่อมโยง

ตัวอย่างเช่นรหัสต่อไปนี้แสดง "Nope ไม่เกินหนึ่ง"

$arr = array(
    'a' => 'apple',
    'b' => 'banana',
);

if (isset($arr['1'])) {
    echo "Yup, more than one.";
} else {
    echo "Nope, not more than one.";
}

0

ฉันทำอาร์เรย์วนลูปของฉันและรับค่าเริ่มต้นให้เต็มตาม Swift 4/5

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.