2011-02-05 37 views
7

Tôi muốn tách các thẻ ra khỏi giá trị bên trong mảng_values ​​() trước khi mã hóa với các tab.PHP: xóa các thẻ khỏi giá trị bên trong mảng_values ​​()

Tôi đã thử với dòng này dưới đây nhưng tôi có một lỗi,

$output = implode("\t",strip_tags(array_keys($item))); 

lý tưởng tôi muốn lột ngắt dòng, không gian gấp đôi, các tab từ giá trị,

$output = implode("\t",preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), strip_tags(array_keys($item)))); 

nhưng tôi nghĩ phương pháp của tôi không đúng!

đây là toàn bộ chức năng,

function process_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
       } 

       # create a line of values for this row... 
       $output .= implode("\t",array_values($item)); 
       $output .= "\n"; 

       # increment the row so we don't create headers all over again 
       $row++; 
      } 
     }  
    } 

    # return the result 
    return $output; 
} 

Xin vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng làm thế nào để sửa lỗi này. Cảm ơn!

Trả lời

3

strip_tags chỉ hoạt động trên chuỗi chứ không hoạt động trên đầu vào mảng. Vì vậy, bạn phải áp dụng nó sau khi implode tạo một chuỗi đầu vào.

$output = strip_tags(
    implode("\t", 
     preg_replace(
      array("/\t/", "/\s{2,}/", "/\n/"), 
      array("", " ", " "), 
      array_keys($item) 
     ) 
    ) 
); 

Bạn sẽ phải kiểm tra xem nó có mang lại kết quả mong muốn hay không. Tôi không biết những gì preg_replace hoàn thành.

Nếu không, bạn có thể sử dụng array_map("strip_tags", array_keys($item)) có các thẻ loại bỏ đầu tiên (nếu có thực sự bất kỳ ý nghĩa \t trong các thẻ trong chuỗi.)

(Không có ý tưởng gì chức năng lớn của bạn là về.)

+0

cảm ơn vì điều này rất nhiều! chức năng này được sử dụng để xuất các tệp excel. nhưng nó gây ra 'lỗi' khi tôi có thẻ, ngắt dòng, v.v. trong giá trị. – laukok

2

Tước các thẻ dễ dàng như sau:

$a = array('key'=>'array item<br>'); 

function fix(&$item, $key) 
{ 
    $item = strip_tags($item); 
} 

array_walk($a, 'fix'); 

print_r($a); 

Tất nhiên, bạn có thể thực hiện bất kỳ sửa đổi nào bạn muốn thành $ item trong chức năng sửa lỗi. Thay đổi sẽ được lưu trữ trong mảng.

Đối với mảng đa chiều use array_walk_recursive($a, 'fix');.

+0

Whats mục đích của $ key trong hàm fix()? Nó dường như không sử dụng biến đó và tất cả. Cảm ơn. – pal4life

+0

'array_walk' sẽ gọi hàm gọi lại là mục và khóa. PHP có thể sẽ bỏ qua nó một cách duyên dáng khi bạn không khai báo '$ key', vì vậy bạn có thể bỏ nó ra. Đã bốn năm rồi và tôi không nhớ lý do, nhưng nếu tôi phải đoán, hoặc là * a) * Tôi muốn chứng minh rằng bạn lấy chìa khóa trong đối số thứ hai trong trường hợp bạn cần nó, * b) * Tôi cảm thấy cách này là nghiêm ngặt hơn và đầy đủ, mà tôi thích tốt hơn, hoặc * c) * Tôi dựa trên một số đoạn mã bao gồm chìa khóa và tôi thậm chí không nhận thấy. :) – GolezTrol

+0

Có ofcourse, 4 năm là một thời gian khá, vì vậy cảm ơn cho phản ứng, tôi đã không bao giờ cố gắng sử dụng array_walk vì vậy tốt đẹp của mình để biết về nó. – pal4life

3

thử ánh xạ mảng thành strip_tags và cắt.

implode("\t", array_map("trim", array_map("strip_tags", array_keys($item)))); 
1

Có vẻ như bạn chỉ cần sử dụng array_map, vì strip_tags mong đợi một chuỗi chứ không phải mảng.

$arr = array( "Some\tTabbed\tValue" => '1', 
       "Some value with double spaces" => '2', 
       "Some\nvalue\nwith\nnewlines" => '3', 
      ); 

$search = array("#\t#", "#\s{2,}#", "#\n#"); 
$replace = array("", " ", " "); 
$output = implode("\t", preg_replace($search, $replace, array_map('strip_tags', array_keys($arr)))); 
echo $output; 
+0

cảm ơn bạn. nó hoạt động hoàn hảo ngay bây giờ! – laukok

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