2012-01-06 24 views
7

Tôi muốn chạy 3 hàm gốc trên cùng một mảng: trim, strtoupper và mysql_real_escape_string. Điều này có thể được thực hiện?Array_Map sử dụng nhiều lần gọi lại gốc?

Đang cố gắng để vượt qua một mảng như một callback như thế này không được làm việc:

$exclude = array_map(array('trim','strtoupper','mysql_real_escape_string'), explode("\n", variable_get('gs_stats_filter', 'googlebot'))); 

Mặc dù điều này hoạt động tốt vì nó chỉ sử dụng một chức năng có nguồn gốc như gọi lại:

$exclude = array_map('trim', explode("\n", variable_get('gs_stats_filter', 'googlebot'))); 

Trả lời

10

Bạn' sẽ phải thực hiện theo cách như sau:

$exclude = array_map(function($item) 
{ 
    return mysql_real_escape_string(strtoupper(trim($item))); 
}, explode("\n", variable_get('gs_stats_filter', 'googlebot'))); 

(Ví dụ này yêu cầu PHP 5.3+ là i t tận dụng chức năng ẩn danh)

+0

Đó là những gì tôi đã tìm; rằng tôi cần phải viết một hàm riêng cho cuộc gọi lại. Thật không may tôi vẫn còn bị mắc kẹt trên PHP 5.2.17 vì vậy tôi đã phải thực hiện một chức năng vô danh, NHƯNG, nó vẫn hoạt động tuyệt vời. Cảm ơn! =) –

+0

Giải pháp tuyệt vời. có nó izz –

4

Bạn cũng có thể làm điều gì đó như:

$exclude = array_map(function($item) { 
    return trim(strtoupper(mysql_real_escape_string($item))); 
    }, explode(...)); 

hoặc một cái gì đó. Vượt qua trong một chức năng vô danh mà làm tất cả những thứ đó.

Hy vọng điều đó sẽ hữu ích.

Chúc may mắn :)

5

Vâng, chỉ cần vượt qua là kết quả của một bản đồ thành khác:

$result = array_map(
    'mysql_real_escape_string', 
    array_map(
     'trim', 
     array_map(
      'strtoupper', 
      $your_array 
     ) 
    ) 
); 

Bạn cũng có thể sử dụng một callback trong PHP 5.3+:

$result = array_map(function($x){ 
    return mysql_real_escape_string(trim(strtoupper($x))); 
}, $your_array); 

hoặc trước đó (trong các phiên bản của PHP thấp hơn 5.3):

$result = array_map(
    create_function('$x','return mysql_real_escape_string(trim(strtoupper($x)));'), 
    $your_array 
); 
+0

@TimCooper: Tôi đang hiển thị các giải pháp khả thi - có ít nhất 3 trong số chúng, nếu 'mảng_map' phải được sử dụng. Nhưng có, thực sự PHP làm cho nó không tối ưu, bởi vì nó đi mảng (mỗi lần nó là khác nhau) 3 lần và trả về toàn bộ mảng 3 lần. – Tadeck

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