explode()给了我不希望的空白值

问题描述 投票:2回答:4

[我想做的是根据字符串的数量来分隔一个字符串。例如,如果我使用此字符串:

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

我的预期结果是

  1. 你好
  2. “”
  3. stackoverflow

如果$string为:

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

我的预期结果将是:

  1. 你好
  2. “”
  3. stackoverflow
  4. “”
  5. “”
  6. 你好吗!

但是如果爆炸得到“ \ n \ n”,它将输出以下内容:

  1. “”
  2. “”
  3. “”

我不需要一个额外的“”,为什么会发生这种情况?

php explode
4个回答
3
投票

PHP的explode在提供的定界符的边界上运行,因此,这是预期的结果。

这里是一个例子:

explode

这会产生3个空字符串,因为在之前,之间和之后有3个非“ \ n”的区域;看到这里:

\n\n

0
投票

我运行了以下代码:

\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”会导致一个空字符串。这是数组中第二个索引的来源。


0
投票

如果要爆炸的字符串以定界符结尾,则结果数组的末尾将始终为空字符串。如果要避免这种情况,可以在分解字符串之前将分隔符从字符串的末尾修剪掉。

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

0
投票

这将为您提供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 )

© www.soinside.com 2019 - 2024. All rights reserved.