在php中将复杂的字符串转换为数组

Pat*_*ore 1 php regex

我有一个PHP变量来自需要整理的表单.我希望你能提供帮助.

该变量包含一个项目列表(可能是两个或三个单词项目,单词之间有空格).我想将它转换为逗号分隔列表,没有多余的空格.我希望这些分歧只落在逗号,分号或新行上.空白不能是项目.

这是一个全面的例子(有故意的混乱输入):

Variable In: "dog, cat         ,car,tea pot,,  ,,, ;;(++NEW LINE++)fly,     cake"
Variable Out "dog,cat,car,tea pot,fly,cake"
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Pas*_*TIN 10

您可以首先将字符串拆分为"有用"部分preg_split,然后将implode这些部分重新组合在一起:

$str_in = "dog, cat         ,car,tea pot,,  ,,, ;;
fly,     cake";

$parts = preg_split('/[,;\s]/', $str_in, -1, PREG_SPLIT_NO_EMPTY);

$str_out = implode(',', $parts);

var_dump($parts, $str_out);
Run Code Online (Sandbox Code Playgroud)

(这里,正则表达式将分为' ,',' ;'和' \s',这意味着任何空格字符 - 我们只保留非空部分)

会得到你,因为$parts:

array
  0 => string 'dog' (length=3)
  1 => string 'cat' (length=3)
  2 => string 'car' (length=3)
  3 => string 'tea' (length=3)
  4 => string 'pot' (length=3)
  5 => string 'fly' (length=3)
  6 => string 'cake' (length=4)
Run Code Online (Sandbox Code Playgroud)

并且,对于$str_out:

string 'dog,cat,car,tea,pot,fly,cake' (length=28)
Run Code Online (Sandbox Code Playgroud)



评论后编辑:对不起,我没注意到那个^^

在这种情况下,你不能用空格分割:-(我可能会用' ,'或' ;' 拆分,迭代各部分,trim用来删除每个项目开头和结尾的白色字符,并且只保留那些不是空的:

$useful_parts = array();
$parts = preg_split('/[,;]/', $str_in, -1, PREG_SPLIT_NO_EMPTY);
foreach ($parts as $part) {
    $part = trim($part);
    if (!empty($part)) {
        $useful_parts[] = $part;
    }
}
var_dump($useful_parts);
Run Code Online (Sandbox Code Playgroud)


执行这部分代码让我:

array
  0 => string 'dog' (length=3)
  1 => string 'cat' (length=3)
  2 => string 'car' (length=3)
  3 => string 'tea pot' (length=7)
  4 => string 'fly' (length=3)
  5 => string 'cake' (length=4)
Run Code Online (Sandbox Code Playgroud)


我得到了这一次,所有这些:

string 'dog,cat,car,tea pot,fly,cake' (length=28)
Run Code Online (Sandbox Code Playgroud)

哪个更好 ;-)