Php 空字符串的问题。空()不工作

Php 空字符串的问题。空()不工作,php,laravel,Php,Laravel,我正在创建一个表单来创建Word文档。有一个部分,用户将创建一个列表,并使用“|”(垂直条)作为一个delimeter来分隔列表行。我正在尝试分解()像这样的字符串:“第一行|第二行|第三行和最后一行|”。正如你们所看到的,我在最后一行后面放了一个垂直条分隔符,这是因为用户可能会犯这个错误,它会在列表中生成一个空行。 我试图通过使用类似以下内容来避免此错误: $lines = explode("|",$lines); for($a=0;$a<count($lines);$a++) {

我正在创建一个表单来创建Word文档。有一个部分,用户将创建一个列表,并使用“|”(垂直条)作为一个delimeter来分隔列表行。我正在尝试分解()像这样的字符串:“第一行|第二行|第三行和最后一行|”。正如你们所看到的,我在最后一行后面放了一个垂直条分隔符,这是因为用户可能会犯这个错误,它会在列表中生成一个空行。 我试图通过使用类似以下内容来避免此错误:

$lines = explode("|",$lines);
for($a=0;$a<count($lines);$a++)
{
  if(!empty($lines[$a]) or !ctype_space($lines[$a])) 
  {
    //generate the line inside de Word Doc
  }
}
$lines=分解(“|”,$lines);

对于($a=0;$a您可能希望使用PHP的
&&
(and)而不是

有关参考,请参阅

如果
empty()
ctype\u space()
都返回false,您只想输出该行。对于当前代码,空字符串将通过
if
测试,因为
ctype\u space()
返回false,即使
empty()
不返回false。完全由空格组成的字符串也将通过,因为
empty()
返回false,即使
ctype\u space()
不返回false

要更正逻辑,请执行以下操作:

if(!empty($lines[$a]) && !ctype_space($lines[$a])) { ... }

或者,我建议在选中
empty()
之前从字符串中删除空白:

$lines=分解(“|”,$lines);
如果(!空($line)){
foreach($line作为$line){
如果(!空(修剪($line)){
//输出该行
}
}
}

另外,请参见。

或者,在迭代之前,使用带有trim回调的array_filter删除空元素或包含空格的元素

<?php
$string = '|foo|bar|baz|bat|';
$split  = explode('|', $string);
$split  = array_filter($split, 'trim');
var_export($split);
但是,您可能不想删除一些空值

首先,您可以修剪管道:

<?php
$string = '|foo|bar|baz|bat|';
$string = trim($string, '|');
$split  = explode('|', $string);
var_export($split);
很漂亮。带有回调是一段非常有用的代码。来自@Progrock的代码更加流畅;)
<?php
$string = '|foo|bar|baz|bat|';
$string = trim($string, '|');
$split  = explode('|', $string);
var_export($split);