2012-02-14 45 views
6

Tôi có một câu hỏi mà tôi không thể tìm thấy câu trả lời.tham chiếu mảng php chuyển đến hàm

Tôi đang xây dựng một mảng rất lớn mà chứa các giá trị hex của một tập tin (như $array[0]=B5$array[1]=82 và vân vân cho đến khi $array[1230009])

Khi tôi tạo một hàm để thao tác một số offsets trong mảng đó và vượt qua $array như tài liệu tham khảo (function parse(&$array) { ... }) phải mất nhiều thời gian hơn nếu tôi vượt qua tiêu chuẩn mảng (function parse($array) { ... }) ..

Làm cách nào có thể?

PS: Có cách nào nhanh hơn không sử dụng mảng không? Chỉ cần sử dụng $ string = "B5 82 00 1E ..etc", nhưng tôi cần theo dõi Offset khi tôi tiến hành đọc giá trị hex vì một số giá trị này có độ dài "

+1

Nó mất nhiều thời gian để vượt qua mảng, hoặc phải mất nhiều thời gian để thực hiện chức năng của mình trên mảng mà bạn vượt qua? Ngoài ra, đây không phải là phương tiện hiệu quả của RAM để tham chiếu từng byte của một tệp. Bạn nên sử dụng chuỗi thay vì methinks. – crush

+0

bản sao có thể có của [Trong PHP (> = 5.0), được chuyển qua tham chiếu nhanh hơn?] (Http://stackoverflow.com/questions/178328/in-php-5-0-is-passing-by-reference-faster) – PeeHaa

+0

phải mất 30 giây để thực hiện chức năng trên mảng (bằng cách tham chiếu) và 2 giây để thực hiện chức năng trên mảng bằng cách truyền thông thường – pufos

Trả lời

3

Có một số thông tin có thể trợ giúp trong bài viết sau: Do not use PHP references

Gần cuối bài đó, Johannes đăng tải phần mã sau đây (trích dẫn):

function foo(&$data) { 
    for ($i = 0; $i < strlen($data); $i++) { 
     do_something($data{$i}); 
    } 
} 

$string = "... looooong string with lots of data ....."; 
foo(string); 

Và một phần của bình luận mà đi với nó là (vẫn trích dẫn):

Nhưng bây giờ trong trường hợp này, nhà phát triển đã cố gắng thông minh và tiết kiệm thời gian bằng cách chuyển tham chiếu.
Nhưng tốt, strlen() mong đợi một bản sao.
copy-on-write không thể được thực hiện trên tài liệu tham khảo để $data sẽ được sao chép để gọi strlen(), strlen() sẽ làm một hoạt động hoàn toàn đơn giản - trong thực tế strlen() là một trong những chức năng tầm thường nhất trong PHP - và bản sao sẽ bị hủy ngay lập tức.

Bạn cũng có thể là trong một tình huống như thế này, xem xét các câu hỏi mà bạn đang yêu cầu ...

+0

CHỈNH SỬA: Ok Tôi hiểu rằng bây giờ nhưng: Cách sử dụng chuỗi như $ string = " B5 82 00 1E .... etc "? Nhưng tôi cần phải thực hiện đăng nhập trên mọi giá trị hex và cần giữ khoảng trống khi tôi đọc trước – pufos

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