[我想做的是根据字符串的数量来分隔一个字符串。例如,如果我使用此字符串:
$string = "Hello\n stackoverflow";
$explode_insert = explode("\n", $string);
我的预期结果是
如果$string
为:
$string = "Hello \nstackoverflow\n\n how are you!"
我的预期结果将是:
但是如果爆炸得到“ \ n \ n”,它将输出以下内容:
我不需要一个额外的“”,为什么会发生这种情况?
我运行了以下代码:
\n\n
^ ^ ^
我得到以下结果:
<?php
$string = "Hello\n stackoverflow";
$explode_insert = explode("\n", $string);
var_dump($explode_insert);
原因是,当分解字符串时,该字符串在定界符处拆分为数组,从而删除了定界符。这意味着它将删除“ \ n”,并将字符串分为两部分:“ Hello”和“ stackoverflow”。
第二个字符串导致:
array(2) {
[0]=>
string(5) "Hello"
[1]=>
string(14) " stackoverflow"
}
这是因为删除两个“ \ n \ n”会导致一个空字符串。这是数组中第二个索引的来源。
如果要爆炸的字符串以定界符结尾,则结果数组的末尾将始终为空字符串。如果要避免这种情况,可以在分解字符串之前将分隔符从字符串的末尾修剪掉。
array(4) {
[0]=>
string(6) "Hello "
[1]=>
string(13) "stackoverflow"
[2]=>
string(0) ""
[3]=>
string(13) " how are you!"
}
但是,$result = explode("\n", rtrim($string, "\n"));
将从字符串末尾删除all换行符,因此,如果将其与rtrim
示例一起使用,则结果数组将只有一个空字符串,而不是两个想要。如果只想删除最后一个换行符,则可以使用"\n\n"
。
preg_replace
这将为您提供Hello stackoverflow与$result = explode("\n", preg_replace('/(.+)\n$/s', '$1', $string));
的最佳结果>
str_replace
这里有更多示例:
$string = "Hello\n stackoverflow"; $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);
php.net上的更多内容:
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 )