explode() 给了我意想不到的空白值

explode() is giving me blank values I am not expecting

我想做的是根据它有多少个 \n 来分隔一个字符串。例如,如果我使用这个:

$string = "Hello\n Whosebug";
$explode_insert = explode("\n", $string);

我的预期结果是

  1. 你好
  2. ""
  3. 计算器

如果 $string 是:

$string = "Hello \nWhosebug\n\n how are you!"

我的预期结果是:

  1. 你好
  2. ""
  3. 计算器
  4. ""
  5. ""
  6. 你好吗!

但相反,如果爆炸得到“\n\n”,它会输出:

  1. ""
  2. ""
  3. ""

有一个我不需要的额外“”,知道为什么会这样吗?

如果您分解的字符串以定界符结尾,则结果数组的末尾将始终为空字符串。如果你想避免这种情况,你可以在分解之前 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 Whosebugstr_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