为什么从字符串到整数的类型转换总是返回“”;0〃;

Why does type casting from string to integer always return "0"?

本文关键字:返回 字符串 整数 类型转换 为什么      更新时间:2023-09-26

我正在写一个AJAX聊天脚本,我正在集成一个系统来解析时间(基本上就像BBCode)。问题是,当我尝试将时间(UNIX时间戳)强制转换为用于date()的整数时,它总是返回"0"。下面是我用来查找和替换的代码。我还添加了一个我试图解析的示例

$out = preg_replace("/'[time'](.*)'['/time']/i",date("c",(int)"$1",$out);

样品:

<b>GtoXic</b>: [time]1342129366[/time]

因为实际转换为整数的是文字字符串$1,并且将字符串转换为整数以以下方式工作:

  • 如果字符串的开头是一个有效的数字表示,请使用它,直到我们遇到与该格式不兼容的字符为止
  • 否则返回零

为了使其发挥作用,您可以使用preg_replace_callback():

$output = preg_replace_callback("/#'[time'](.*)'[/time']#i", function ($matches) {
  return date("c", $matches[1]);
}, $input);

(int)强制转换实际上是不必要的,当您将值传递给需要整数的函数时,PHP将自动处理此问题。

您需要使用preg_replace_callback()

脚本失败的原因是(int)"$1"实际上是0(零),因此在将其作为参数之一传递之前,它已经转换为零。

您需要的是带有回调函数的preg_replace_callback:

$out = "<b>GtoXic</b>: [time]1342129366[/time]";
$out = preg_replace_callback('/'[time']([0-9]*)'['/time']/i', 'test', $out);
function test($matches)
{
  return date("c", (int)$matches[1]);
}