修剪函数在PHP中似乎无效

3


我很喜欢PHP中的trim函数。然而,我遇到了一个奇怪的问题。我有一个名为keys的字符串,它包含:"mavrick,ball,bouncing,food,easy mac,",并执行了这个函数。

// note the double space before "bouncing"
$keys = "mavrick, ball,  bouncing, food,  easy mac, ";
$theKeywords = explode(", ", $keys);
foreach($theKeywords as $key){
  $key = trim($key);
}
echo $theKeywords[2];

然而在这里,输出是“ bouncing”而不是“bouncing”。难道trim在这里使用是正确的吗?
编辑:
我的原始字符串在“bounce”之前有两个空格,出于某种原因它没有显示出来。 我尝试使用foreach($theKeywords as &$key)引用它,但它抛出了一个错误。

如果你使用了trim(),为什么要用", "来分割而不是直接用","呢? - lukas.pukenis
代码解析错误:在chooseCats.php的第40行,意外的'&',期望T_VARIABLE或'$'。代码 - DragonVet
4个回答

5

问题在于您使用的是副本而不是原始值。请改用引用:

$theKeywords = explode(", ", $keys);
foreach($theKeywords as &$key){
  $key = trim($key);
}
echo $theKeywords[2];

1
还要别忘了在循环后使用unset($key),以避免在稍后使用相同变量时出现问题。 - Maerlyn
当我这样做时,我会收到一个“解析错误:在chooseCats.php的第40行,意外的'&',期望T_VARIABLE或'$'”的错误代码。 - DragonVet
1
@rekire 像 JavaScript 一样,PHP 只有全局作用域和函数作用域。在 PHP 中没有块级作用域。参考:http://php.net/manual/en/language.variables.scope.php - Kaii
@user1848437 你具体是什么意思?trim()会去掉所有 周围的“空白字符” - phant0m
@phant0m 这只是一条注释,请按照注释所说的去查看 PHP 文档,你会看到这样的内容:“即使在 foreach 循环结束后,$value 引用和最后一个数组元素仍然存在。”由于他在 foreach 中使用了引用,因此适用这个规则。不要太过苛刻。但是,在这种情况下,你的评论如何帮助任何人呢? - HenchHacker
显示剩余7条评论

3

在循环中,您没有重新编写原始数组中的值,您可以使用array_map将其简化为一行,如下所示

$theKeywords = array_map('trim', explode(',', $keys));

+1 非常简洁 - 只做必要的事情,不多也不少 :) - HenchHacker

1

$key 只是获取值的一个副本,而不是实际的值。要更新实际的值,请在数组本身中进行修改(例如,使用 for 循环):

$theKeywords = explode(", ", $keys);
for($i = 0; $i < count($theKeywords); $i++) {
    $theKeywords[$i] = trim($theKeywords[$i]);
}
echo $theKeywords[2];

0

使用闭包的另一种方式:

$keys = "mavrick, ball,  bouncing, food,  easy mac, ";
$theKeywords = explode(", ", $keys);
array_walk($theKeywords, function (&$item, $key) {
    $item = trim($item);
});
print $theKeywords[2];

但是,它只能在PHP 5.3+中运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接