用PHP分隔每个空格的字符串

时间:2011-02-16 17:57:44

标签: php string

我有一个输入,用户可以输入多个单词,并告诉他们用空格分隔。所以输入可能如下所示:

foo

或者像这样:

foo bar php js

如何检查空格,如果有空格,拆分单词,然后将其全部放入数组中?我将在我的程序中循环遍历该数组。我刚刚接受像这样的字符串处理。

8 个答案:

答案 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()

如果用户输入的内容不仅限于小写字母,或者您希望在提取时进行验证,则可以调用其他更合适的函数。

了解您的业务逻辑将为该任务确定最佳解决方案。

演示: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',
)

答案 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 循环打印,否则将仅打印用户输入。