Ответ 1
См. explode
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
У меня есть вход, где пользователь может вводить несколько слов, и им предлагается разделить его пробелом. Поэтому вход может выглядеть так:
foo
или вот так:
foo bar php js
Как я могу проверить пробелы, и если есть пробелы, разделите слова, а затем поместите все это в массив? Я прокручу этот массив в моей программе. Я просто новичок в обработке строк, как это.
См. explode
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
Да 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;
}
Надеюсь, это поможет вам.
Даниэль уже писал о разделении, позвольте мне также добавить проверку для части пространства.
$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;
}
Ваш образец ввода относительно спокойный. Если вы доверяете своим пользователям вводить подходящие подстроки, которые всегда разделены ровно одним пробелом, тогда лучшим выбором будет 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',
)
Как сказал Даниэль, explode()
идеально подходит для такого рода ситуаций. Вы также можете посмотреть preg_split()
(чисто для будущей ссылки), поскольку он принимает регулярное выражение, а не просто простой разделитель и позволит вам разбить ввод на более сложный шаблон.
В целях оптимизации я считаю, что лучше использовать лишние пробелы, например, двойные пробелы, прежде чем использовать функцию разрыва. например: если у вас есть "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];
Это также может сработать почти так же, как один из приведенных ответов.
$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;
}
Это будет работать, если между входной строкой нет пробела. '
$pieces = explode(" ", $pizza);
if(count($pieces > 1)) {
foreach($pieces as $piece) {
echo $piece;
}
}
else {
echo $userInput;
}
?>'
Пояснение:
После взрыва струны на куски. Во-первых, он проверяет, есть ли у нас больше элементов в массиве, например, $ piece, если да, он будет печатать через цикл foreach, иначе он просто напечатает пользовательский ввод.