PHP array_map trim + 参数

PHP array_map trim + parameters

我将 array_map 用于 trim 我所有的数组值,但我需要传递第三个参数,因为我需要的不仅仅是 trim 空格,所以我传递了在第三个参数中。 基本上我想 trim 空格、单引号和双引号的所有数组值。

我有一个实用程序 class,我在其中创建了函数,它看起来像这样:

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('"'));
}

但我仍然得到相同的结果。

array_map 接受一个只接受一个参数的函数。如果你想用 trim() 映射你的数组,后续参数不同于默认参数,你必须用匿名函数包装它:

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

我认为您需要为此使用匿名函数:)

$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);

我会使用 array_walk,您只需将额外的字符附加到现有的默认值(来自 the docs):

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