替换 PHP 中数组中的空格

Replace whitespace in array in PHP

我有一个索引页面,其中包含由 space 分隔的用户输入项目列表。它将列表作为一个数组进行处理,并将白色 space 替换为“,”。但是,我的 PHP 脚本似乎没有这样做,我不确定我是否理解为什么。

index.php

<form action="process.php" method="post">
    <b>Enter a list of items separated by a space:</b> <br><input name="list[]" type="text">
    <input type="submit">
</form>

process.php

<?php
$list = $_POST["list"];
$list = preg_replace('#\s+#',', ',trim($list));
echo "<b>Your listed items were:</b> $list";

?>

如果能帮助理解这一点,我们将不胜感激!谢谢!

编辑 非常感谢大家!看来我的问题是一个相当新手的问题,解决它很容易。

可能是因为您 运行 preg_replace 在数组上。

改为尝试使用 array_walk:

$list = array('this', 'is a', 'test');

array_walk($list, function(&$v){
    $v = str_replace(' ', ', ', trim($v));
});


print_r(implode(', ', $list));

// Outputs: this, is, a, test

print_r(explode(', ', implode(', ', $list)));

// Outputs: ['this', 'is', 'a', 'test']

或者,如果您想对字符串执行相同的操作:

$string = 'This is some test string';

print_r(str_replace(' ', ', ', trim($string)));

那是因为你将输入名称设置为list[],以数组的形式提交给服务器端脚本。要处理,您有两个选择:

  1. 将输入类型更改为 <input name="list" type="text">,并保留您当前拥有的服务器端脚本。注意 "list" 后面没有大括号 []

  2. 保留您当前拥有的前端 HTML 并更新您的服务器端代码:

    $lists = $_POST["list"]; //this comes in as an array from the HTML form
    $str = '';
    foreach($lists AS $list)
    {
        $str .= preg_replace('#\s+#',', ',trim($list));
    }
    echo "<b>Your listed items were:</b> $str";
    
  1. 从输入名称中删除 []:

index.php

<form action="process.php" method="post">
    <b>Enter a list of items separated by a space:</b> <br><input name="list" type="text">
    <input type="submit">
</form>
  1. 这里真的需要正则表达式吗?使用 strtr() 因为它更有效:

process.php

<?php
$list = $_POST["list"];
$list = strtr(trim($list), ' ', ',');
echo "<b>Your listed items were:</b> $list";
?>