3


我是trimPHP 函数的粉丝。但是,我想我遇到了一个奇怪的障碍。我有一个名为 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];

然而在这里,输出是“弹跳”而不是“弹跳”。在这里使用的功能不trim正确吗?

编辑:
我的原始字符串在“反弹”之前有两个空格,由于某种原因它不想显示。我尝试用 foreach($theKeywords as &$key) 引用它,但它抛出了一个错误。

4

4 回答 4

5

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

$theKeywords = explode(", ", $keys);
foreach($theKeywords as &$key){
  $key = trim($key);
}
echo $theKeywords[2];
于 2012-11-25T12:58:35.213 回答
3

您不会在循环中重写原始数组中的值,您可以使用 将其简化为一行array_map,就像这样

$theKeywords = array_map('trim', explode(',', $keys));
于 2012-11-25T13:04:08.687 回答
1

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

$theKeywords = explode(", ", $keys);
for($i = 0; $i < count($theKeywords); $i++) {
    $theKeywords[$i] = trim($theKeywords[$i]);
}
echo $theKeywords[2];
于 2012-11-25T12:59:59.533 回答
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+

于 2012-11-25T13:18:47.063 回答