explode() 给了我意想不到的空白值
explode() is giving me blank values I am not expecting
我想做的是根据它有多少个 \n 来分隔一个字符串。例如,如果我使用这个:
$string = "Hello\n Whosebug";
$explode_insert = explode("\n", $string);
我的预期结果是
- 你好
- ""
- 计算器
如果 $string
是:
$string = "Hello \nWhosebug\n\n how are you!"
我的预期结果是:
- 你好
- ""
- 计算器
- ""
- ""
- 你好吗!
但相反,如果爆炸得到“\n\n”,它会输出:
- ""
- ""
- ""
有一个我不需要的额外“”,知道为什么会这样吗?
如果您分解的字符串以定界符结尾,则结果数组的末尾将始终为空字符串。如果你想避免这种情况,你可以在分解之前 trim 将字符串末尾的分隔符去掉。
$result = explode("\n", rtrim($string, "\n"));
但是,rtrim
将从字符串末尾删除 所有 换行符,因此如果您将它与 "\n\n"
示例一起使用,结果数组将只有一个空字符串,而不是你想要的两个。如果只想删除最后一个换行符,可以使用 preg_replace
代替。
$result = explode("\n", preg_replace('/(.+)\n$/s', '', $string));
PHP 的 explode
在提供的分隔符的边界上运行,因此这些是预期的结果。
这是一个例子:
\n\n
这会产生 3 个空字符串,因为有 3 个区域不是“\n”,之前、之间和之后;看这里:
\n\n
^ ^ ^
我运行下面的代码:
<?php
$string = "Hello\n Whosebug";
$explode_insert = explode("\n", $string);
var_dump($explode_insert);
我得到了以下结果:
array(2) {
[0]=>
string(5) "Hello"
[1]=>
string(14) " Whosebug"
}
原因是,在分解字符串时,字符串在分隔符处被拆分成一个数组,删除了分隔符。这意味着它删除了“\n”,并将字符串拆分为两部分:"Hello" 和“Whosebug”。
第二个字符串结果为:
array(4) {
[0]=>
string(6) "Hello "
[1]=>
string(13) "Whosebug"
[2]=>
string(0) ""
[3]=>
string(13) " how are you!"
}
这是因为删除两个“\n\n”会导致空字符串。这是数组中第二个索引的来源。
这将为您提供 Hello Whosebug 和 str_replace
的清晰结果
$string = "Hello\n Whosebug";
$explode_insert = str_replace('\n', '', $string);
echo $explode_insert;
这里还有一些例子:
$string = "piece1\n piece2\n piece3\n piece4\n piece5\n piece6\n";
$pieces = explode(" ", $string);
//Simple example
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
echo "<br>-----<br>";
var_dump($pieces);
echo "<br>-----<br>";
print_r($pieces);
输出:
piece1 piece2
-----
C:\wamp\www\a\test2.php:24:
array (size=6)
0 => string 'piece1
' (length=7)
1 => string 'piece2
' (length=7)
2 => string 'piece3
' (length=7)
3 => string 'piece4
' (length=7)
4 => string 'piece5
' (length=7)
5 => string 'piece6
' (length=7)
-----
Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 [4] => piece5 [5] => piece6 )
有关 php.net 的更多信息:https://www.php.net/manual/en/function.explode.php
我想做的是根据它有多少个 \n 来分隔一个字符串。例如,如果我使用这个:
$string = "Hello\n Whosebug";
$explode_insert = explode("\n", $string);
我的预期结果是
- 你好
- ""
- 计算器
如果 $string
是:
$string = "Hello \nWhosebug\n\n how are you!"
我的预期结果是:
- 你好
- ""
- 计算器
- ""
- ""
- 你好吗!
但相反,如果爆炸得到“\n\n”,它会输出:
- ""
- ""
- ""
有一个我不需要的额外“”,知道为什么会这样吗?
如果您分解的字符串以定界符结尾,则结果数组的末尾将始终为空字符串。如果你想避免这种情况,你可以在分解之前 trim 将字符串末尾的分隔符去掉。
$result = explode("\n", rtrim($string, "\n"));
但是,rtrim
将从字符串末尾删除 所有 换行符,因此如果您将它与 "\n\n"
示例一起使用,结果数组将只有一个空字符串,而不是你想要的两个。如果只想删除最后一个换行符,可以使用 preg_replace
代替。
$result = explode("\n", preg_replace('/(.+)\n$/s', '', $string));
PHP 的 explode
在提供的分隔符的边界上运行,因此这些是预期的结果。
这是一个例子:
\n\n
这会产生 3 个空字符串,因为有 3 个区域不是“\n”,之前、之间和之后;看这里:
\n\n
^ ^ ^
我运行下面的代码:
<?php
$string = "Hello\n Whosebug";
$explode_insert = explode("\n", $string);
var_dump($explode_insert);
我得到了以下结果:
array(2) {
[0]=>
string(5) "Hello"
[1]=>
string(14) " Whosebug"
}
原因是,在分解字符串时,字符串在分隔符处被拆分成一个数组,删除了分隔符。这意味着它删除了“\n”,并将字符串拆分为两部分:"Hello" 和“Whosebug”。
第二个字符串结果为:
array(4) {
[0]=>
string(6) "Hello "
[1]=>
string(13) "Whosebug"
[2]=>
string(0) ""
[3]=>
string(13) " how are you!"
}
这是因为删除两个“\n\n”会导致空字符串。这是数组中第二个索引的来源。
这将为您提供 Hello Whosebug 和 str_replace
$string = "Hello\n Whosebug";
$explode_insert = str_replace('\n', '', $string);
echo $explode_insert;
这里还有一些例子:
$string = "piece1\n piece2\n piece3\n piece4\n piece5\n piece6\n";
$pieces = explode(" ", $string);
//Simple example
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
echo "<br>-----<br>";
var_dump($pieces);
echo "<br>-----<br>";
print_r($pieces);
输出:
piece1 piece2
-----
C:\wamp\www\a\test2.php:24:
array (size=6)
0 => string 'piece1
' (length=7)
1 => string 'piece2
' (length=7)
2 => string 'piece3
' (length=7)
3 => string 'piece4
' (length=7)
4 => string 'piece5
' (length=7)
5 => string 'piece6
' (length=7)
-----
Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 [4] => piece5 [5] => piece6 )
有关 php.net 的更多信息:https://www.php.net/manual/en/function.explode.php