2016-12-22 17 views
3

私はすべての配列値をトリムするのに3番目のパラメータを渡す必要があるので、私は3番目のパラメータを渡すので、空白をトリミングする以上のものが必要です。 基本的には、空白、一重引用符、二重引用符のすべての配列値をトリミングします。PHP array_map trim + parameters

は私が機能を作成したユーティリティクラスを持っており、それは次のようになります。

public function convertToArray($string, $trim = false) { 
    $split = explode(",", $string); 

    if($trim) { 
     $split = array_map("trim", $split, array(" '\"")); 
    } 

    return $split; 
} 

どういうわけか私もこの仕事をすることはできません。私がthe answer hereに続いても、私は結果に二重引用符を見ることができます。

私も

if($trim) { 
    $split = array_map("trim", $split); 
    $split = array_map("trim", $split, array("'")); 
    $split = array_map("trim", $split, array('"')); 
} 

を試してみましたが、私はまだ同じ結果を得ます。

+0

--- ](http://stackoverflow.com/questions/5132533/php-how-can-i-explode-a-string-by-commas-but-not-wheres-the-commas-are-within)。 –

答えて

11

array_mapは、1つのパラメータしか取らない関数をとります。あなたはデフォルトのものとは異なる後続のパラメータを持つtrim()を使用して配列をマッピングする場合は、匿名関数でそれをラップする必要があります:私はあなたがそのために無名関数を使用する必要があると思う

$split = array_map(function($item) { 
    return trim($item, ' \'"'); 
}, $split); 
+0

'trim 'の2番目のパラメータを一重引用符に変更した理由はありますか? –

+1

私の個人的な好みです。彼らはすべてを文字通り扱い、変数を解析しないなど、二重引用符よりも一重引用符を優先します。この場合は違いはありませんが、とにかくバックスラッシュで文字の1つをエスケープする必要があります。 –

2

:)

$split = array_map(function ($value) { 
    return trim($value, " '\""); 
}, $split); 

これは他の回答とまったく同じであるため、ここでは別の方法があります。これはあなたがさまざまな場所で必要になるだろう操作である場合には、このアプローチが役に立つかもしれません;)

function trim_spaces_and_quotes($value) { 
    return trim($value, " '\""); 
} 

$split = array_map('trim_spaces_and_quotes', $split); 
0

私はarray_walkを使用したい、とあなただけの既存のデフォルトにあなたの追加の文字を追加する必要がある(からthe docs):このSOの質問に[述べたように、あなたの文字列は引用符内の区切り文字が含まれている場合、それは `むしろexplode``よりstr_getcsv`使用することをお勧めしますちょうどここに来た人のためのサイドノートで

array_walk($string_arr_to_trim, function (&$v) { 
    $v = trim($v, " \t\n\r\0\x0B'\""); 
});