2010-09-24 8 views

Trả lời

16

Hoặc bạn có thể sử dụng rtrim chức năng như:

$result = ''; 
foreach($array as $i=>$k) { 
    $result .= $i.'-'.$k.','; 
} 
$result = rtrim($result,','); 
echo $result; 
+3

Yea, quên về cắt tỉa. +1 –

+0

Tôi thích cái này tốt hơn, cảm ơn. – Bastien

+0

php quá tệ không hỗ trợ 'unset ($ result [strlen ($ result) -1])'. Nó sẽ rất đẹp ... – NikiC

7

Một phương pháp là sử dụng substr

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); 

$output = ""; 
foreach($array as $i=>$k) 
{ 
    $output .= $i.'-'.$k.','; 
} 

$output = substr($output, 0, -1); 

echo $output; 

phương pháp khác sẽ được sử dụng implode

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); 

$output = array(); 
foreach($array as $i=>$k) 
{ 
    $output[] = $i.'-'.$k; 
} 

echo implode(',', $output); 
+0

cảm ơn bạn đã giúp đỡ của bạn – Bastien

0

thử mã này sau điều kiện foreach rồi echo $ result1

$result1=substr($i, 0, -1); 
3

Tôi không thích ý tưởng này khi sử dụng chất nền, vì đó là phong cách lập trình kém. Ý tưởng là ghép nối tất cả các phần tử và tách chúng bằng các cụm từ "tách biệt" đặc biệt. Ý tưởng để gọi chuỗi con cho điều đó giống như sử dụng laser để bắn chim.

Trong dự án tôi hiện đang xử lý, chúng tôi cố gắng loại bỏ các thói quen xấu trong mã hóa. Và mẫu này được coi là một trong số đó. Chúng tôi buộc các lập trình viên viết mã này như sau:

$first = true; 
$result = ""; 
foreach ($array as $i => $k) { 
    if (!$first) $result .= ","; 
    $first = false; 
    $result .= $i.'-'.$k; 
} 
echo $result; 

Mục đích của mã này rõ ràng hơn nhiều so với mã sử dụng chất nền. Hoặc bạn có thể chỉ cần sử dụng chức năng implode (dự án của chúng tôi là trong Java, vì vậy chúng tôi phải thiết kế chức năng riêng của chúng tôi để ghép chuỗi theo cách đó). Bạn nên sử dụng hàm substr chỉ khi bạn có nhu cầu thực sự cho điều đó. Ở đây điều này nên tránh, vì nó là một dấu hiệu của phong cách lập trình xấu.

+0

Làm thế nào nó là một dấu hiệu của phong cách lập trình xấu? Bạn có phiền phức tạp về điều đó cho tất cả chúng ta không? Theo như tôi có thể thấy nó không cản trở hiệu suất. Tôi có thể hiểu được phần rõ ràng, nhưng đồng thời nó không khó để đọc lên những gì chất nền nào để tìm ra nó. Cảm ơn! –

+0

IMHO, mọi công cụ nên được sử dụng phù hợp trong các chương trình, và nó không phải là mục đích cơ bản để phục vụ cho chuỗi nối, nó được thiết kế cho các vấn đề khác. Bên cạnh đó, mã này với chất nền trông rõ ràng chỉ sau đó nó ở một nơi. Nếu có nhiều mảnh như thế này, mã sẽ biến thành không thể đọc được. Do đó trong dự án của chúng tôi, chúng tôi đã thay đổi thành ghép nối bình thường, và cũng tạo ra một chức năng đặc biệt cho điều đó. Bây giờ, một phần của dự án đang xử lý các chuỗi có thể đọc được nhiều hơn. –

+0

Cảm ơn bạn rất nhiều vì giải pháp tuyệt vời và chuyên nghiệp này. (y) –

1

tôi luôn luôn sử dụng phương pháp này:

$result = ''; 
foreach($array as $i=>$k) { 
    if(strlen($result) > 0) { 
     $result .= "," 
    } 
    $result .= $i.'-'.$k; 
} 
echo $result; 
+0

Ý tưởng tồi để sử dụng strlen cho việc này. Xem bài viết "Quay lại vấn đề cơ bản" của Joel Spolsky để xem tại sao. Chỉ cần sử dụng một cờ boolean để thực hiện kiểm tra như vậy, bởi vì trong trường hợp xấu nhất (mảng có N yếu tố - ký tự đơn), bạn sẽ kết thúc với O (N^2) phức tạp. –

+0

Nói chung, không sử dụng các hàm chuỗi để đạt được một số hiệu ứng, có thể dễ dàng đạt được bằng các thủ thuật lập trình đơn giản (điều này cũng đúng khi sử dụng chất nền để loại bỏ dấu phẩy cuối cùng - tốt hơn là không tạo comman ở tất cả). –

10

Tôi không thích tất cả các công thức nấu ăn trước.

Php không phải là C và có các cách cấp cao hơn để giải quyết vấn đề cụ thể này.

Tôi sẽ bắt đầu từ điểm, nơi bạn có một mảng như thế này:

$array = array('john-doe', 'foe-bar', 'oh-yeah'); 

Bạn có thể xây dựng như một mảng từ một trong những ban đầu sử dụng một vòng lặp hoặc array_map() chức năng. Lưu ý rằng tôi đang sử dụng các chuỗi được trích dẫn một lần. Đây là một tối ưu hóa vi mô nếu bạn không có tên biến cần được thay thế.

Bây giờ bạn cần phải tạo ra một chuỗi CSV từ mảng này, nó có thể được thực hiện như thế này:

echo implode(',', $array); 
+0

Lợi ích của phương pháp này là chúng tôi có thể thay đổi dấu phân cách dễ dàng hơn. Hơn nữa, bạn có thể phát nổ chuỗi để mảng sau này tương tự như thế này. Không chắc chắn về hiệu suất nhược điểm – thethanghn

+0

+1 cho cách tiếp cận rõ ràng hơn. – NikiC

+0

Tôi cũng thích cái này hơn. Đừng lặp lại nếu bạn không phải làm vậy. – Powertieke

0

này sẽ làm:

rtrim ($string, ',') 
1

Giả sử mảng là một chỉ số, đây là làm việc cho tôi. Tôi lặp lại $ i và thử $ i đối với $ key.Khi phím kết thúc, dấu phẩy không in. Lưu ý rằng IF có hai giá trị để đảm bảo giá trị đầu tiên không có dấu phẩy ngay từ đầu.

foreach($array as $key => $value) 
{ 
    $w = $key; 
    //echo "<br>w: ".$w."<br>";// test text 
    //echo "x: ".$x."<br>";// test text 
    if($w == $x && $w != 0) 
    { 
    echo ", "; 
    } 
    echo $value; 
    $x++; 
} 
0

xem ví dụ này, bạn có thể dễ dàng hiểu

$name = ["sumon","karim","akash"]; 
foreach($name as $key =>$value){ 
echo $value; 
if($key<count($name){ 
    echo ","; 
} 
}