ดังนั้นฉันอยากรู้เกี่ยวกับประสิทธิภาพของวิธีการบางอย่างที่กล่าวถึงในคำตอบสำหรับจำนวนเต็มจำนวนมาก
การจัดเตรียม
เพียงแค่สร้างอาร์เรย์ของจำนวนเต็ม 1 ล้านสุ่มระหว่าง 0 และ 100 กว่าฉันได้กำหนดให้พวกเขาได้รับสตริง
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
วิธีที่ 1
นี่คือหนึ่งซับจากคำตอบของ Mark:
$integerIDs = array_map('intval', explode(',', $long_string));
วิธีที่ 2
นี่คือวิธีการ JSON:
$integerIDs = json_decode('[' . $long_string . ']', true);
วิธีที่ 3
ฉันมากับอันนี้เป็นการดัดแปลงคำตอบของมาร์ค นี้ยังคงใช้explode()
ฟังก์ชั่น แต่แทนที่จะเรียกarray_map()
ผมใช้ประจำforeach
วงที่จะทำงานเพื่อหลีกเลี่ยงค่าใช้จ่ายarray_map()
อาจจะมี ฉันกำลังวิเคราะห์ด้วย(int)
vs intval()
แต่ฉันลองทั้งสองอย่างและไม่มีความแตกต่างในแง่ของประสิทธิภาพ
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
ผล:
Method 1 Method 2 Method 3
0.4804770947 0.3608930111 0.3387751579
0.4748001099 0.363986969 0.3762528896
0.4625790119 0.3645150661 0.3335959911
0.5065748692 0.3570590019 0.3365750313
0.4803431034 0.4135499001 0.3330330849
0.4510772228 0.4421861172 0.341176033
0.503674984 0.3612480164 0.3561749458
0.5598649979 0.352314949 0.3766179085
0.4573421478 0.3527538776 0.3473439217
0.4863037268 0.3742785454 0.3488383293
บรรทัดล่างคือค่าเฉลี่ย ดูเหมือนว่าวิธีแรกจะช้ากว่าเล็กน้อยสำหรับ 1 ล้านจำนวนเต็ม แต่ฉันไม่ได้สังเกตเห็นการเพิ่มขึ้นของประสิทธิภาพที่ 3 ของวิธีที่ 2 ตามที่ระบุไว้ในคำตอบ มันกลับกลายforeach
เป็นห่วงที่เร็วที่สุดในกรณีของฉัน ฉันทำการเปรียบเทียบกับ Xdebug แล้ว
แก้ไข: ไม่นานมานี้ตั้งแต่คำตอบถูกโพสต์ไว้ เพื่อชี้แจงมาตรฐานเสร็จใน php 5.6