我有一个输入,用户可以输入多个单词,并告诉他们用空格分隔。所以输入可能如下所示:
foo
或者像这样:
foo bar php js
如何检查空格,如果有空格,拆分单词,然后将其全部放入数组中?我将在我的程序中循环遍历该数组。我刚刚接受像这样的字符串处理。
答案 0 :(得分:68)
请参阅explode
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
答案 1 :(得分:9)
是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;
}
希望这会对你有所帮助。
答案 2 :(得分:2)
Daniel已经发布了关于拆分的部分,让我也添加了空间部分的检查。
$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;
}
答案 3 :(得分:2)
您的样本输入相对平静。如果您希望用户完美输入总是由一个空格分隔的合格子字符串,那么最好的选择是explode()
。
如果用户输入的内容不仅限于小写字母,或者您希望在提取时进行验证,则可以调用其他更合适的函数。
了解您的业务逻辑将为该任务确定最佳解决方案。
$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',
)
答案 4 :(得分:0)
正如丹尼尔所说,explode()
对于这种情况是完美的。您可能还希望查看preg_split()
(纯粹是为了将来参考),因为它接受正则表达式而不仅仅是一个简单的分隔符,并允许您在更复杂的模式上分解输入。
答案 5 :(得分:0)
出于优化目的,我认为在使用explode函数之前删除多余空格(如双空格)会更好。例如:如果您有"foo bar php js "
,则在使用explode函数之前,此字符串必须变为"foo bar php js"
。你可以试试这段代码:
$charSet = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $charSet);
$charSet = rtrim($charSet);
$charSetArray = explode(" ", $charSet);
echo $charSetArray[0];
echo $charSetArray[1];
答案 6 :(得分:0)
这也可以工作,几乎与已经给出的答案之一相同。
$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;
}
答案 7 :(得分:0)
如果输入字符串之间没有空格,这将起作用。
$pieces = explode(" ", $pizza);
if(count($pieces > 1)) {
foreach($pieces as $piece) {
echo $piece;
}
}
else {
echo $userInput;
}
?>`
说明:
将字符串炸成碎片后。首先,它检查数组中是否还有更多项目,即 $ pieces ,如果是,它将通过 foreach 循环打印,否则将仅打印用户输入。