替换 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[]
,以数组的形式提交给服务器端脚本。要处理,您有两个选择:
将输入类型更改为 <input name="list" type="text">
,并保留您当前拥有的服务器端脚本。注意 "list" 后面没有大括号 []
。
保留您当前拥有的前端 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";
- 从输入名称中删除 []:
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>
- 这里真的需要正则表达式吗?使用 strtr() 因为它更有效:
process.php
<?php
$list = $_POST["list"];
$list = strtr(trim($list), ' ', ',');
echo "<b>Your listed items were:</b> $list";
?>
我有一个索引页面,其中包含由 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[]
,以数组的形式提交给服务器端脚本。要处理,您有两个选择:
将输入类型更改为
<input name="list" type="text">
,并保留您当前拥有的服务器端脚本。注意 "list" 后面没有大括号[]
。保留您当前拥有的前端 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";
- 从输入名称中删除 []:
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>
- 这里真的需要正则表达式吗?使用 strtr() 因为它更有效:
process.php
<?php
$list = $_POST["list"];
$list = strtr(trim($list), ' ', ',');
echo "<b>Your listed items were:</b> $list";
?>