วิธีที่ดีที่สุดในการเริ่มต้นอาร์เรย์ (ว่าง) ใน PHP


297

ในบางภาษาอื่น ๆ (ตัวอย่างเช่น AS3) มีการบันทึกไว้ว่าการเริ่มต้นอาร์เรย์ใหม่นั้นจะเร็วขึ้นหากทำเช่นนี้var foo = []มากกว่าvar foo = new Array()ด้วยเหตุผลของการสร้างวัตถุและการสร้างอินสแตนซ์ ฉันสงสัยว่า PHP มีความเทียบเท่าหรือไม่

class Foo {
    private $arr = array(); // is there another / better way?
}

11
นั่นคือทั้งหมดที่ฉันเคยทำ
Matthew

2
ขอขอบคุณทุกคนที่ตอบกลับ (และอย่างรวดเร็ว!) ฉันต้องเลือกคำตอบโดยพลการดังนั้นแอนดี้จึงดูเหมือนจะเจาะลึกที่สุด
Tom Auger

1
คำถามนี้ช่วยได้มาก
Hitesh


2
@ zx1986 เป็นวิธีที่ค่อนข้างยุ่งยากในการสร้างอาร์เรย์ที่ว่างเปล่า แน่นอนน้อยกว่า OP $arr = array()หรือ$arr = []
Tom Auger

คำตอบ:


189

ในการใช้งาน ECMAScript (เช่น ActionScript หรือ JavaScript) Array()เป็นฟังก์ชันตัวสร้างและ[]เป็นส่วนหนึ่งของไวยากรณ์ตัวอักษรของอาร์เรย์ ทั้งสองได้รับการปรับให้เหมาะสมและดำเนินการในรูปแบบที่แตกต่างกันโดยสิ้นเชิงด้วยไวยากรณ์ตัวอักษรที่ไม่ถูกเชื่อฟังโดยค่าใช้จ่ายในการเรียกใช้ฟังก์ชัน

ในทางกลับกัน PHP มีโครงสร้างภาษาที่อาจดูเหมือนฟังก์ชั่น แต่ไม่ได้รับการปฏิบัติเช่นนั้น แม้จะใช้ PHP 5.4 ซึ่งสนับสนุน[]เป็นทางเลือก แต่ก็ไม่มีความแตกต่างในเรื่องค่าใช้จ่ายเพราะเท่าที่คอมไพเลอร์ / parser เกี่ยวข้องก็มีความหมายเหมือนกันทั้งหมด

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

หากคุณต้องการสนับสนุน PHP เวอร์ชันเก่าให้ใช้ไวยากรณ์เดิม นอกจากนี้ยังมีข้อโต้แย้งสำหรับความสามารถในการอ่าน แต่ในฐานะที่เป็นผู้พัฒนา JS มาเป็นเวลานาน ฉันทำผิดพลาดจริง ๆ แล้วพยายามเริ่มต้นอาร์เรย์ที่ใช้[]เมื่อฉันเรียนรู้ PHP ครั้งแรก

นี้การเปลี่ยนแปลงภาษาที่ได้รับการเสนอเดิมและปฏิเสธเนื่องจากคะแนนเสียงข้างมากกับนักพัฒนาหลักด้วยเหตุผลต่อไปนี้:

แพตช์นี้จะไม่ได้รับการยอมรับเพราะนักพัฒนาหลักส่วนใหญ่ลงคะแนนไม่เห็นด้วย แม้ว่าคุณจะใช้ค่าเฉลี่ยสะสมระหว่างผู้พัฒนาหลักและผู้ใช้โหวตดูเหมือนว่าจะแสดงตรงกันข้ามมันจะไม่รับผิดชอบในการส่งแม่มดแก้ไขไม่ได้รับการสนับสนุนหรือบำรุงรักษาในระยะยาว

อย่างไรก็ตามปรากฏว่ามีการเปลี่ยนแปลงของหัวใจที่นำไปสู่ ​​5.4 อาจได้รับอิทธิพลจากการใช้งานของการสนับสนุนสำหรับฐานข้อมูลยอดนิยมเช่น MongoDB (ซึ่งใช้ ECMAScript ไวยากรณ์)


51
อาจจะมีการเปลี่ยนแปลง 5.4 ถูกสร้างขึ้นมาเพราะคนที่สามารถสะกด "ซึ่ง" เอามากกว่าการลงคะแนนเสียง :)
ร็อบแกรนท์

40
ฉันชอบ$array = [];เพราะมันทำให้การกลับไปกลับมาระหว่าง JS และ PHP ง่ายขึ้น
Justin

ดังนั้นเป็น$array = []; ตัวเลือกที่ดีกว่า หรือฉันควรลองอันอื่น อันไหนดีกว่า
Hitesh

2
@hitesh: มันเป็นเรื่องของการตั้งค่าส่วนตัว พวกมันทั้งสองมีฟังก์ชั่นการใช้งานที่เหมือนกัน[]เพียงพิมพ์ได้ง่ายกว่าเล็กน้อย
Andy E

7
ดูเหมือนว่าไวยากรณ์ [] จะเป็นที่ต้องการในระดับสากล แต่สิ่งสำคัญคือต้องทราบว่ามีโฮสต์จำนวนมากที่ยังคงใช้ 5.3 โดยเฉพาะ หากคุณต้องการแจกจ่ายรหัสของคุณไวยากรณ์ [] จะทำให้เสียชีวิต
ฯลฯ

204
$myArray = []; 

สร้างอาร์เรย์ที่ว่างเปล่า

คุณสามารถกดค่าลงในอาร์เรย์ในภายหลังเช่น:

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

ณ จุดนี้ $ myArray มี "tree", "house" และ "dog" คำสั่งข้างต้นแต่ละคำสั่งจะผนวกเข้ากับอาร์เรย์รักษารายการที่มีอยู่แล้ว

เมื่อมาจากภาษาอื่นวิธีนี้ในการต่อเติมเข้าไปในอาเรย์ก็ดูแปลกสำหรับฉัน ฉันคาดว่าจะต้องทำอะไรบางอย่างเช่น $ myArray + = "dog" หรืออะไรบางอย่าง ... หรืออาจจะเป็นวิธี "add ()" เช่นคอลเลกชัน Visual Basic ที่มี แต่ไวยากรณ์ต่อท้ายโดยตรงนี้สั้นและสะดวก

จริงๆคุณต้องใช้ฟังก์ชั่น unset () เพื่อลบรายการ:

unset($myArray[1]); 

... จะลบ "เฮาส์" ออกจากอาร์เรย์ (อาร์เรย์จะเป็นศูนย์)

unset($myArray); 

... จะทำลายอาร์เรย์ทั้งหมด

เพื่อให้ชัดเจนไวยากรณ์ของวงเล็บเหลี่ยมที่ว่างสำหรับการผนวกอาร์เรย์เป็นเพียงวิธีบอก PHP ให้กำหนดดัชนีให้กับแต่ละค่าโดยอัตโนมัติมากกว่าที่คุณจะกำหนดดัชนี ภายใต้หน้าปก, PHP ทำสิ่งนี้:

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

คุณสามารถกำหนดดัชนีด้วยตัวเองได้ถ้าต้องการและคุณสามารถใช้ตัวเลขใดก็ได้ที่คุณต้องการ นอกจากนี้คุณยังสามารถกำหนดหมายเลขดัชนีให้กับบางรายการและไม่ใช่อื่น ๆ หากคุณทำเช่นนั้น PHP จะกรอกหมายเลขดัชนีที่หายไปซึ่งจะเพิ่มขึ้นจากหมายเลขดัชนีที่ใหญ่ที่สุดที่ได้รับมอบหมาย

ดังนั้นถ้าคุณทำสิ่งนี้:

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

... รายการ "dog" จะได้รับหมายเลขดัชนี 21 PHP ไม่ทำการจับคู่รูปแบบที่ชาญฉลาดสำหรับการกำหนดดัชนีเพิ่มเติมดังนั้นจึงไม่ทราบว่าคุณอาจต้องการให้กำหนดดัชนี 30 ถึง "dog " คุณสามารถใช้ฟังก์ชันอื่นเพื่อระบุรูปแบบการเพิ่มขึ้นสำหรับอาร์เรย์ ฉันจะไม่เข้าไปที่นี่ แต่ทั้งหมดอยู่ในเอกสาร PHP

ไชโย

- = คาเมรอน


6
สิ่งสำคัญที่ควรทราบคือ $ ary = [] ใช้งานได้กับ PHP 5.4 เท่านั้น จากมุมมองของประสิทธิภาพอย่างไรก็ตามไม่มีข้อได้เปรียบในการ [] vs. array ()
Tom Auger

1
สำหรับรุ่นก่อนหน้านี้คุณสามารถใช้ array_push () w3schools.com/php/func_array_push.asp ฉันไม่ทราบว่ามีการเชื่อมโยงกับประสิทธิภาพหรือไม่
ทำเครื่องหมาย

3
คุณเข้าใจผิด @ คะแนน TomAuger ของ @Mark $array[] = 'foo'ทำงานได้ดีใน PHP เวอร์ชันเก่า เป็นเพียง$array = [];การเริ่มต้นอาร์เรย์ที่ใหม่ใน 5.4
Codemonkey

เพื่อความยุติธรรมนี่เป็นการตอบคำถามของ OP อย่างแท้จริง
Smitty

ฮ่า ๆ ๆ ... ใจปลิว ทศวรรษของ PHP และฉันแค่เรียนรู้ว่าคุณไม่จำเป็นต้องใช้ array_push
กรุงเทพ

61

ก่อนหน้า PHP 5.4:

$myArray = array();

PHP 5.4 ขึ้นไป

$myArray = [];

และเราจะสร้างอาเรย์หลายมิติโดยใช้ PHP 5.4 ขึ้นไปได้อย่างไร
Siraj Alam

26

ใน PHP อาร์เรย์คืออาร์เรย์ ไม่มีการพิจารณาแบบดั้งเดิมกับการพิจารณาวัตถุดังนั้นจึงไม่มีการปรับให้เหมาะสมที่เทียบเท่าได้


1
คำตอบที่ดีที่สุด IMO: มีไวยากรณ์ที่แตกต่างกัน แต่เกี่ยวกับการแสดงพวกเขาทั้งหมดจะเหมือนกัน
Matthieu Napoli

1
เป็นปัญหาประสิทธิภาพการทำงานที่เกี่ยวข้องกับการมีสำหรับทั้ง ..where ฉันสามารถตรวจสอบเกี่ยวกับเรื่องนี้ .. เชื่อมโยงใด ๆ หรือ doc
Hitesh

2
ดังนั้นจนกว่าคุณจะแน่ใจว่าโค้ดของคุณจะไม่ทำงานในสภาพแวดล้อม 5.4 ก่อนหน้านี้ให้ใช้ $ array = new array ()
Tom Auger

20

สิ่งที่คุณทำนั้นถูกต้อง 100%

ในแง่ของการตั้งชื่อที่ดีก็มักจะทำที่คุณสมบัติส่วนตัว / ป้องกันจะนำหน้าด้วยการขีดเส้นใต้เพื่อให้ชัดเจนว่าพวกเขาไม่ได้เป็นสาธารณะ เช่นprivate $_arr = array()หรือpublic $arr = array()


2
ใน php ฉันคิดว่าเป็นการดีกว่าที่จะไม่ตั้งชื่อพวกเขาด้วยเครื่องหมายขีดล่างเนื่องจากคุณมักจะใช้$thisเพื่อรับค่าและไม่ควรใช้คุณสมบัติสาธารณะ
meze

1
@meze คุณต้องการเข้าถึงพวกเขาชอบและ$this->arr $this->_arrทำไมคุณไม่ควรใช้ทรัพย์สินสาธารณะ!
James C

5

ลองสิ่งนี้:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }

4
ค่อนข้างเจ๋ง แต่เป็นเคล็ดลับปาร์ตี้มากกว่ารูปแบบการเข้ารหัสที่มีประโยชน์จริง ๆ คุณไม่คิดเหรอ?
Tom Auger

อาจมีประโยชน์หากคุณต้องการสร้างอาร์เรย์ในวัตถุที่มีรูปแบบคุณสมบัติและแปลงเป็นอาร์เรย์ในที่สุด
Jomar Sevillejo

4

นอกจากนี้ไม่มีทางอื่นดังนั้นนี่คือสิ่งที่ดีที่สุด

แก้ไข: คำตอบนี้ไม่ถูกต้องตั้งแต่ PHP 5.4 ขึ้นไป


นี่ไม่ใช่กรณีอีกต่อไป 5.4 แนะนำชวเลขไวยากรณ์สำหรับอาร์เรย์
Andy E

13
@Motes ทำไมเกลียดมาก: '(? ล้อเล่นกันฉันได้ทำให้มันชัดเจนมากขึ้นโดย "โดดเด่น" คำตอบเก่ามันอาจเป็นประโยชน์สำหรับมือใหม่ที่จะเข้าใจว่าคำตอบนั้นเปลี่ยนไป
Matthieu Napoli

@Motes ผู้คนจะสูญเสียรายได้จากคำตอบเมื่อลบออก มันจะดีกว่าที่จะแก้ไข
mbomb007

4

การเริ่มต้นอาร์เรย์อย่างง่าย:

<?php $array1=array(10,20,30,40,50); ?>

การเริ่มต้นอาร์เรย์ภายในอาร์เรย์:

<?php  $array2=array(6,"santosh","rahul",array("x","y","z")); ?>

ที่มา: Sorce สำหรับรหัส


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