【问题标题】:PHP Concatenation becomes NULLPHP 连接变为 NULL
【发布时间】:2009-10-30 17:48:47
【问题描述】:

当我运行此代码时,大约在串联循环进行到一半时,$xml 变为 null,并在串联循环的其余部分中保持为 null。有人知道为什么会这样吗?

$xml = '';
foreach($this->currentColumns['unknown'] as $column => $value)
{
   $xml .= "<columnName>";
   $xml .= $column;
   $xml .= "</columnName>\r\n";
}
return $xml;

【问题讨论】:

  • 你能发布“print_r($currentColumns)”返回的内容吗?
  • 嗯嗯,你最终解决了这个问题吗?如果是这样,如何?

标签: php string concatenation


【解决方案1】:

如果 $this->currentColumns 是 XML 解析的某种结果(例如 SimpleXML),那么这个数组的元素很可能不是真正的字符串,而是 XMLElement 对象,或者足够接近的东西。

尝试转换你的变量,这样你就可以确定你连接的是字符串而不是对象:

$xml = '';
foreach($this->currentColumns['unknown'] as $column => $value)
{
   $xml .= "<columnName>";
   $xml .= (string)$column;  // <--- here is the trick
   $xml .= "</columnName>\r\n";
}
return $xml;

【讨论】:

  • 感谢 Nicolas,currentColumns 是我在代码的更高级别构建的数组。这个函数所做的是我正在创建并将发布到 API 的 xml 字符串的一部分。但是为了它,我添加了字符串转换并没有修复它。这真的很奇怪,我开始认为这里有 PHP 错误。我正在使用 PHP 5.3
【解决方案2】:

您必须随时打印出您的 $column 值。如果您得到一个非常意外的列名,您可能需要在为其创建 xml 字符串之前测试该条件。

【讨论】:

  • 如果我只用 $xml .= $column; 替换循环中的内容然后它工作。对不起,应该提到这一点。但是一旦我添加回循环的第一行或最后一行,就会出现上述问题。
  • 在这种情况下,尝试将循环中的所有内容放在一行中,如下所示:$xml .= ""。 strval($column) ."\r\n";
  • strval() 是一个不错的选择,感谢您指出这一点。我以前见过。
猜你喜欢
  • 2014-12-29
  • 2015-02-03
  • 2013-03-30
  • 2013-05-09
  • 2023-04-08
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多