2011-02-05 19 views
7

タブで埋め込む前に、array_values()内の値からタグを取り除きたい。PHP:array_values()内の値からタグを取り除く

私は以下の行を試みたが、私はエラーを持って、

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

理想的に私は値から改行、ダブルスペース、タブを剥ぎ取るしたい、

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

けど私の方法が正しくないと思う!

、これは全体の機能である、

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; 
} 

は、あなたがこの問題を解決するためにどのように任意のアイデアを持っているなら、私に知らせてください。ありがとう!

答えて

3

strip_tagsは、文字列でのみ動作し、配列入力では動作しません。したがって、implodeの文字列を入力した後に適用する必要があります。

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

あなたが望む結果が得られるかどうかをテストする必要があります。私はpreg_replaceが何を達成するのか分からない。

そうでなければ、タグを持っているarray_map("strip_tags", array_keys($item))を使用することができます(文字列のタグ内の\t重大なが本当にあるかどうか。)最初に削除

(あなたの大切な機能があるものについては考えていない。)

+0

ありがとうございました!この機能は、Excelファイルをエクスポートするために使用されます。値にタグや改行などがあると「バグ」が発生しました。 – laukok

2

タグを取り除くことは簡単です:

もちろん、修正機能で$ itemのような変更を加えることができます。変更は配列に格納されます。

多次元配列の場合use array_walk_recursive($a, 'fix');

+0

関数fix()の$ keyの目的は何ですか?その変数et allを使用していないようです。ありがとう。 – pal4life

+0

'array_walk'はアイテムとキーを渡すコールバックを呼び出します。 '$ key'を宣言していないと、PHPはそれを無視してしまうかもしれません。それは4年経ちましたが、その理由を覚えていませんが、推測する必要がある場合は、* a)* 2番目の議論で鍵を得ることを示したい、* b)*この方法はより厳密かつ完全です。私はそれがより好きです、または* c)*私はキーを含むいくつかのスニペットに基づいており、気付かなかったこともあります。 :) – GolezTrol

+0

はい、もちろん、4年はかなりの時間ですので、回答してくれてありがとう、私はarray_walkを使ってみることは一度もありませんでした。 – pal4life

3

strip_tagsとtrimに配列をマッピングしてみてください。

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

strip_tagsは配列ではなく配列であるため、array_mapを使用する必要があります。

$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

ありがとうございます。それは今完璧に動作します! – laukok

関連する問題