2009-12-04 84 views
6

Sau khi đã sử dụng Java trong một thời gian dài, phương pháp chuẩn của tôi để tạo chuỗi dài từng mảnh là thêm các phần tử vào mảng và sau đó implode mảng.Ghép nối chuỗi với mảng implode trong PHP

$out[] = 'a'; 
$out[] = 'b'; 
echo implode('', $out); 

Nhưng sau đó có nhiều dữ liệu.

Cách thay thế (chuẩn PHP) là sử dụng nối chuỗi.

$out = 'a'; 
$out .= 'b'; 
echo $out; 

Điều ngạc nhiên của tôi dường như không có sự khác biệt về tốc độ giữa cả hai phương pháp. Khi có sự khác biệt đáng kể về thời gian thường thì đó là kết nối có vẻ nhanh hơn, nhưng không phải tất cả thời gian.

Vì vậy, câu hỏi của tôi là: ở đó - ngoài khả năng đọc kiểu và mã - bất kỳ lý do nào khác để chọn một cách tiếp cận khác?

+1

PHP không phải là Java. Vì vậy, đừng ngạc nhiên rằng chúng khác nhau. – Gumbo

+0

Trong PHP, các chuỗi không phải là bất biến hoặc thậm chí là các đối tượng. – Powerlord

Trả lời

8

Với tôi, việc sử dụng một mảng có nghĩa là bạn sẽ làm điều gì đó không thể thực hiện được với chuỗi nối đơn giản. Giống như sắp xếp, kiểm tra tính duy nhất, v.v. Nếu bạn không làm bất cứ điều gì như vậy, thì việc nối chuỗi sẽ dễ đọc hơn trong một hoặc hai năm bởi một người không biết mã. Họ sẽ không phải tự hỏi liệu mảng đó có bị thao túng trước khi bị tấn công hay không.

Điều đó nói rằng, tôi sử dụng phương pháp tiếp cận mảng được mã hóa khi tôi cần xây dựng một chuỗi bằng dấu phẩy hoặc "và" giữa các từ.

3

Chọn chế độ dễ đọc hơn. Luôn luôn. Trường hợp này, tôi sẽ nhận apporach thứ hai. Sau đó, tối ưu hóa nó, nếu đó là một nút cổ chai.

+0

Không, nó không phải là một nút cổ chai, chỉ tò mò. Nhưng dù sao tôi đã đề cập đến khả năng đọc. – Matijs

+1

Tôi chỉ có thể đồng ý với điều này - không bao giờ làm điều gì đó vì chương trình vi điểm chuẩn hiển thị nhanh hơn 0,0001%. với XDebug hoặc zendDebugger có profilers cho PHP và nếu đó là không đủ có cách để cấu hình thời gian chạy PHP quá, thời gian dành có cách tốt hơn được sử dụng hơn trong maintianing "optmized" mã (và thường nó thậm chí còn rẻ hơn để chạy một số phần cứng nhiều hơn trả tiền cho nhà phát triển) – johannes

+0

+1 chỉ cần chọn cái thích hợp nhất. Nếu 'implode' giải quyết vấn đề một cách thanh lịch, hãy sử dụng nó. –

3

One (tinh tế) khác biệt là rõ ràng khi tạo một chuỗi ký tự-tách:

<?php 
$out[] = 'a'; 
$out[] = 'b'; 
echo implode(',', $out); 

foreach($out as $o) { 
    echo $o . ','; 
} 

?> 

Người đầu tiên sẽ in a,b nơi sau này sẽ in a,b,. Vì vậy, trừ khi bạn đang sử dụng một chuỗi rỗng như một seperator, như bạn đã làm trong ví dụ của bạn, nó thường được ưa thích để sử dụng implode().

+0

Người ta có thể làm: $ đầu tiên = true; foreach ($ out as $ o) { nếu ($ đầu tiên) $ first = false; else echo ','; echo $ o; } Điều đó sẽ cung cấp cho bạn a, b thay thế. –

+1

@Raney: tại sao tất cả các rắc rối khi 'implode()' cách dễ dàng hơn? – Lukman

2

Cuộc chiến thánh thánh nối với nhau: Không, không có sự khác biệt.

0

nó phụ thuộc vào những gì bạn muốn làm gì với chuỗi/mảng và cách bạn tạo ra nó

nếu bạn bắt đầu với một mảng và cần phải sắp xếp nó/thao tác các yếu tố nhất định, sau đó tôi đề nghị nổ tung

khác hơn là tôi thường sử dụng ghép nối

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