2011-12-08 45 views
8

Tôi muốn để bọc tất cả các yếu tố của một mảng với một cái gì đó giống như nhưng tôi không muốn có một rất nhiều dòng hoặc vòng lặp foreachphần tử mảng quấn tất cả các yếu tố

$links = array('london','new york','paris'); 

// the outcome should be 

<a href="#london">london</a> 
<a href="#new york">new york</a> 
<a href="#paris">paris</a> 
+1

Vì vậy, sau khi loại trừ khả năng các phương pháp kinh điển và hợp lý, những gì khác bạn đã thử? –

+0

tôi cũng rất hợp với vòng lặp foreach Tôi chỉ muốn xem liệu điều đó là có thể. – Val

+0

Tại sao không có vòng lặp foreach? Oh, bạn vừa trả lời khi tôi đăng! – Ryan

Trả lời

23

Làm thế nào về array_map?

$links = array('london', 'new york', 'paris'); 
$wrapped = array_map(
    function ($el) { 
     return "<a href=\"#{$el}\">{$el}</a>"; 
    }, 
    $links 
); 

Demo (Bấm vào nguồn)

Without PHP> 5.3, bạn không thể sử dụng một hàm lambda, vì vậy bạn sẽ cần một cái gì đó như thế này:

function wrap_those_links($el) { 
     return "<a href=\"#{$el}\">{$el}</a>"; 
} 

$links = array('london', 'new york', 'paris'); 
$wrapped = array_map('wrap_those_links', $links); 

Demo for PHP 5.2 (Một lần nữa, nhấp vào Nguồn)

+0

Lỗi phân tích cú pháp: lỗi cú pháp, T_FUNCTION không mong đợi, mong đợi ')' trên ... trên dòng 183, đưa ra lỗi nhưng đó là điều thú vị :) – Val

+0

Bạn không được chạy PHP 5.3.0 :) - Đây là một sửa chữa dễ dàng, một sec Tôi sẽ cập nhật câu trả lời của tôi – nickb

+2

Hoặc 'create_function' –

7

Hãy thử join('\n', array_map(function($a) { return "<a href=\"#$a\",>$a<\\a>";}, $links));

+2

... hoặc vì thay vì sử dụng hàm có tên "implode", anh ta đã sử dụng bí danh "join" và chưa định dạng câu trả lời theo cách dễ đọc hoặc cung cấp giải thích về giới hạn của đề xuất (PHP 5> = 5.3). Implode là tiềm ẩn hơn nhiều khi nói đến tự tài liệu. – SEoF

+0

Tôi nghĩ rằng câu trả lời này không hoàn toàn đúng, sử dụng đơn thay vì dấu ngoặc kép và dấu gạch chéo ngược thay vì dấu gạch chéo, nó phải là: 'join (" \ n ", mảng_map (hàm ($ a) {return" $a " ;}, $ links)); ' – superUntitled

0

Có một dòng giải pháp:

trim(json_encode(array_values($array)) , '[]'); 

Output sẽ trông giống như:

"one","two","three" 
Các vấn đề liên quan