У меня есть индексная страница, которая принимает пользовательский ввод списка элементов, разделенных пробелом. Он обрабатывает этот список как массив и заменяет пробел на «,». Однако мой 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)));
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 = strtr(trim($list), ' ', ',');
echo "<b>Your listed items were:</b> $list";
?>
Это потому, что вы установили имя входа в list[]
который передается на серверный скрипт в виде массива. Для обработки у вас есть два варианта:
Измените тип ввода на <input name="list" type="text">
и оставьте скрипт на стороне сервера таким, каким он у вас сейчас есть. Обратите внимание, что в «списке» нет скобок []
после этого.
Оставьте внешний 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";