我有一个 php 变量,它来自需要整理的表单。
该变量包含一个项目列表(可能是两个或三个单词项目,单词之间有空格)。
我想将其转换为逗号分隔的列表,没有多余的空格。我希望分隔符只出现在逗号、分号或换行符处。空白不能成为项目。
这是一个综合示例(故意输入混乱的内容):
输入字符串:
$input = 'dog, cat ,car,tea pot,, ,,, ;;
fly, cake';
期望的结果字符串:
dog,cat,car,tea pot,fly,cake
您可以首先将字符串拆分为“有用”的部分,然后使用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);
(这里,正则表达式将按“,
”、“
;
”和“
\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)
并且,对于
$str_out
:
string 'dog,cat,car,tea,pot,fly,cake' (length=28)
评论后编辑:抱歉,我没注意到那个^^
在这种情况下,你不能按空格分割:-(我可能会按 ',
' 或 '
;
' 进行分割,迭代各个部分,使用
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);
执行这部分代码让我受益匪浅:
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)
这次我明白了,一切都在一起爆炸:
string 'dog,cat,car,tea pot,fly,cake' (length=28)
哪个更好;-)
explode
和
trim
和
str_replace
来获取数组,手动删除特定字符,然后将其转回数组。
function getCleanerStringFromString($stringIn) {
///turn the string into an array with a comma as the delimiter
$myarray = explode(",",$stringin);
for ($ii =0; $ii < count($myarray); $ii++) {
///remove new lines, semi colons, etc
///use this line as many times as you'd like to take out characters
$myarray($ii) = str_replace(";","",$myarray($ii);
////remove white spaces
$myarray($ii) = trim($myarray($ii));
}
//then turn it back into an array:
$backstring = implode(","$myarray);
return $backstring;
}
$array = preg_split('/\s*[;,\n]\s*/', $string);
$array = preg_grep('/^\s*$/', $array, PREG_GREP_INVERT);
$string = implode(',', $array);
编辑:实际上 grep 不是必需的:
$array = preg_split('/\s*[;,\n]\s*/', $string, -1, PREG_SPLIT_NO_EMPTY);
$string = implode(',', $array);
理想情况下,这允许使用比 ,;\s 更混乱的字符 等等
$strIn = "dog, cat ,car,tea pot,, ,,, ;;(++NEW LINE++)fly, cake";
$firstArray = explode(",", $strIn);
$searchPattern = "/[^A-Za-z0-9 ]+/";
function removeViolators($item, $key) {
preg_replace($searchPattern, "", $item);
trim($item);
if (empty($item)) {
unset($item);
}
}
array_walk($firstArray, removeViolators);
$strOut = implode(",", $firstArray);