Заменить пробел в массиве в переполнении стека

У меня есть индексная страница, которая принимает пользовательский ввод списка элементов, разделенных пробелом. Он обрабатывает этот список как массив и заменяет пробел на «,». Однако мой 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";

?>

Любая помощь в понимании этого будет принята с благодарностью! Спасибо!

РЕДАКТИРОВАТЬ
Большое спасибо всем! Похоже, моя проблема была довольно новичкой, и исправить это было довольно легко.

1

Решение

Возможно, потому что вы запускаете 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)));
1

Другие решения

  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";
?>
2

Это потому, что вы установили имя входа в list[] который передается на серверный скрипт в виде массива. Для обработки у вас есть два варианта:

  1. Измените тип ввода на <input name="list" type="text">и оставьте скрипт на стороне сервера таким, каким он у вас сейчас есть. Обратите внимание, что в «списке» нет скобок [] после этого.

  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";
    
0
По вопросам рекламы [email protected]