2011-10-01 24 views
5

Tôi biết một số cách để có được một ký tự ngoài một chuỗi cho chỉ mục.Cách nhanh nhất để nhận được một ký tự bên trong một chuỗi được cung cấp cho chỉ mục (PHP)

<?php 
$string = 'abcd'; 
echo $string[2]; 
echo $string{2}; 
echo substr($string, 2, 1); 
?> 

Tôi không biết nếu có bất kỳ cách nào khác, nếu bạn biết xin vui lòng không ngần ngại thêm nó. Câu hỏi đặt ra là, nếu tôi chọn và lặp lại phương pháp trên một vài triệu lần, có thể sử dụng mt_rand để nhận giá trị chỉ mục, phương pháp nào hiệu quả nhất về mức tiêu thụ bộ nhớ và tốc độ nhanh nhất?

+1

'$ string [2]' hoặc '$ string {2}' phải giống nhau về tốc độ và mức tiêu thụ bộ nhớ và e ither của họ nên được nhanh hơn so với chất nền. – anubhava

Trả lời

18

Để đến câu trả lời, bạn sẽ cần phải thiết lập giàn kiểm tra điểm chuẩn. So sánh tất cả các phương thức trên một vài trăm nghìn hoặc hàng triệu lần lặp lại trên một hộp không hoạt động. Hãy thử chức năng microtime tích hợp để đo sự khác biệt giữa bắt đầu và kết thúc. Đó là thời gian trôi qua của bạn.

Bài kiểm tra sẽ đưa bạn tất cả 2 phút để viết.

Để giúp bạn tiết kiệm một số nỗ lực, tôi đã viết một bài kiểm tra. Thử nghiệm của riêng tôi cho thấy rằng các giải pháp chức năng (chất nền) là MUCH chậm hơn (dự kiến). Giải pháp PHP ({}) thành ngữ nhanh như phương pháp chỉ mục. Họ có thể hoán đổi cho nhau. Các [[]) được ưa thích, vì đây là hướng mà PHP sẽ liên quan đến việc bù đắp chuỗi.

<?php 
$string = 'abcd'; 
$limit = 1000000; 

$r = array(); // results 

// PHP idiomatic string index method 
$s = microtime(true); 
for ($i = 0; $i < $limit; ++$i) { 
    $c = $string{2}; 
} 
$r[] = microtime(true) - $s; 
echo "\n"; 

// PHP functional solution 
$s = microtime(true); 
for ($i = 0; $i < $limit; ++$i) { 
    $c = substr($string, 2, 1); 
} 
$r[] = microtime(true) - $s; 
echo "\n"; 

// index method 
$s = microtime(true); 
for ($i = 0; $i < $limit; ++$i) { 
    $c = $string[2]; 
} 
$r[] = microtime(true) - $s; 
echo "\n"; 


// RESULTS 
foreach ($r as $i => $v) { 
    echo "RESULT ($i): $v \n"; 
} 
?> 

Kết quả:
KẾT QUẢ (PHP4 & 5 niềng răng thành ngữ cú pháp): ,19106006622314
KẾT QUẢ (chuỗi lát chức năng): ,50699090957642
KẾT QUẢ (* cú pháp chỉ số, tương lai là niềng răng không được dùng nữa *): 0.19102001190186

Các vấn đề liên quan