3


私はtrimPHPの関数のファンです。しかし、私は奇妙な障害に遭遇したと思います。「mavrick、ball、bouncing、food、easy mac」を含むkeysという名前の文字列があり、この関数を実行します

// 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ここで使用するのに適切な関数ではありませんか?

編集:
私の元の文字列には、「バウンス」の前に2つのスペースがあります。何らかの理由で、表示されたくありませんでした。そして、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ように使用して、これを1行に簡略化できます。

$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 に答える