Подтвердить что ты не робот

Разделение строки в PHP с каждым пробелом

У меня есть вход, где пользователь может вводить несколько слов, и им предлагается разделить его пробелом. Поэтому вход может выглядеть так:

foo

или вот так:

foo bar php js

Как я могу проверить пробелы, и если есть пробелы, разделите слова, а затем поместите все это в массив? Я прокручу этот массив в моей программе. Я просто новичок в обработке строк, как это.

4b9b3361

Ответ 1

См. explode

// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

Ответ 2

Да explode сделает все для вас и foreach можно использовать для извлечения значений из массива снова. Полный код будет выглядеть следующим образом:

$str = "foo bar php js";
$arr =  explode(" ", $str);

//print all the value which are in the array
foreach($arr as $v){
    echo $v;
}

Надеюсь, это поможет вам.

Ответ 3

Даниэль уже писал о разделении, позвольте мне также добавить проверку для части пространства.

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza = trim($pizza);

if(strpos($pizza, " ") !== false)

    $pieces = explode(" ", $pizza);
    echo $pieces[0]; // piece1
    echo $pieces[1]; // piece2

}else{

    echo $pizza;

}

Ответ 4

Ваш образец ввода относительно спокойный. Если вы доверяете своим пользователям вводить подходящие подстроки, которые всегда разделены ровно одним пробелом, тогда лучшим выбором будет explode().

Если пользовательский ввод может отличаться от строчных букв или вы хотите проверить его при извлечении, есть другие более подходящие функции для вызова.

Понимание вашей бизнес-логики определит лучшее решение для этой задачи.

Демонстрация: https://3v4l.org/3TT2V

$input = "foo bar, php js  double-space apo'strophe 9 ";

echo 'explode(): '; var_export(explode(' ', $input));

echo "\npreg_split(): "; var_export(preg_split('/ +/', $input, null, PREG_SPLIT_NO_EMPTY));

echo "\nstr_word_count(): "; var_export(str_word_count($input, 1));

echo "\npreg_match_all(): "; var_export(preg_match_all('/[a-z]+/', $input, $output) ? $output[0]: []);

Выход:

explode(): array (
  0 => 'foo',
  1 => 'bar,',
  2 => 'php',
  3 => 'js',
  4 => '',
  5 => 'double-space',
  6 => 'apo\'strophe',
  7 => '9',
  8 => '',
)
preg_split(): array (
  0 => 'foo',
  1 => 'bar,',
  2 => 'php',
  3 => 'js',
  4 => 'double-space',
  5 => 'apo\'strophe',
  6 => '9',
)
str_word_count(): array (
  0 => 'foo',
  1 => 'bar',
  2 => 'php',
  3 => 'js',
  4 => 'double-space',
  5 => 'apo\'strophe',
)
preg_match_all(): array (
  0 => 'foo',
  1 => 'bar',
  2 => 'php',
  3 => 'js',
  4 => 'double',
  5 => 'space',
  6 => 'apo',
  7 => 'strophe',
)

Ответ 5

Как сказал Даниэль, explode() идеально подходит для такого рода ситуаций. Вы также можете посмотреть preg_split() (чисто для будущей ссылки), поскольку он принимает регулярное выражение, а не просто простой разделитель и позволит вам разбить ввод на более сложный шаблон.

Ответ 6

В целях оптимизации я считаю, что лучше использовать лишние пробелы, например, двойные пробелы, прежде чем использовать функцию разрыва. например: если у вас есть "foo bar php js ", эта строка должна стать "foo bar php js" перед использованием функции explode. вы можете попробовать этот код:

$charSet = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $charSet);
$charSet = rtrim($charSet);
$charSetArray = explode(" ", $charSet);
echo $charSetArray[0];
echo $charSetArray[1];

Ответ 7

Это также может сработать почти так же, как один из приведенных ответов.

$string = "my house is nice";
//here the delimiter is " "
$array =  explode(" ", $string);

//this will print all the array out
foreach($array as $v){
    echo $v;
}

Ответ 8

Это будет работать, если между входной строкой нет пробела. '

    $pieces = explode(" ", $pizza);
    if(count($pieces > 1)) {
        foreach($pieces as $piece) {
            echo $piece;
        }
    }
    else {
        echo $userInput;
    }
?>'

Пояснение:
После взрыва струны на куски. Во-первых, он проверяет, есть ли у нас больше элементов в массиве, например, $ piece, если да, он будет печатать через цикл foreach, иначе он просто напечатает пользовательский ввод.