【问题标题】:PHP String in Array Only Returns First Character数组中的 PHP 字符串仅返回第一个字符
【发布时间】:2010-08-31 03:10:45
【问题描述】:

接下来的一周,我被 1-bar EDGE 互联网连接卡住了,非常缓慢,所以如果我没有花足够的时间研究这个,请原谅我,但我只是设置了一个本地服务器进行测试我通常会在 Internet 上测试的代码,但在我的本地 LAMP 安装上似乎并没有以相同的方式工作。

问题是,当我这样做时:

echo strtolower($_REQUEST['page']);

结果是这样的:

files

但是,当我这样做时:

$page['name'] = strtolower($_REQUEST['page']);
echo $page['name'];

结果是这样的:

f

不,这不是错字,它始终只返回字符串的第一个字母。执行var_dump($page) 将导致string(5) "files",但执行var_dump($page['name']) 将导致string(1) "f"。我正在使用PHP 5.2.1

这是怎么回事?

【问题讨论】:

  • 您是否 100% 确定您在此处发布的代码与您实际执行的代码相同?
  • 你在哪里声明了位置'files'的值?
  • 是的,我确实是复制粘贴的。
  • 为什么要使用 var_dump($page['files'])?你不应该做一个 var_dump($page['name']) 吗?
  • 是的,我就是这个意思。那部分我没有复制粘贴,其实是$page['name']。

标签: php


【解决方案1】:

您几乎回答了自己的问题。 $page 是“文件”(如您的第一个 var_dump 所示)。这可能是由已弃用的register_globals 或其手动近似值引起的。鉴于此,

$page['files']

是“f”。这是因为非数字字符串被隐式转换为 0 (!)。您可以通过以下方式轻松重现:

$page = 'files';
echo $page['files'];

【讨论】:

  • 我在您发布此内容之前就想通了。是的,$page 被设置为文件,但我不知道。显然,问题源于在我的本地安装中打开的 PHP 设置,但不是远程设置,因此如果 GET 变量“page”设置为文件,$page 也将设置为文件。感谢您的帮助。
  • @AriX register_globals 我猜是吗?这正是您始终需要正确初始化变量关闭register_globals的原因。
  • 是的,它是 register_globals,我刚刚关闭了它。我不知道为什么它首先打开 - 我不记得打开它,也许它是 Mac XAMPP 的默认设置?再次感谢!
【解决方案2】:

执行var_dump($page) 将导致string(5) "files"

这意味着变量$page 是一个字符串,而不是您所期望的包含字符串的数组。您也可以在字符串上使用类似数组的偏移量来返回字符串中的单个字符。通过类型转换的魔力,$string['files'] 等价于$string[0],返回第一个字符。

您的问题出在您将字符串分配给$page 的某个地方,或者之后您将它从一个数组转换为单个字符串的某个地方。您提供的代码应该按原样工作。

我想$page 在你分配给$page['name'] 时已经是一个字符串,所以你实际上是在设置字符串的第一个字符。尝试显式声明$page = array()

【讨论】:

  • 是的,这就是问题所在 - 我显然没有清楚地阅读 var_dump 的输出,无法意识到它不是我想象的数组,并且我认为 register_globals 已关闭(因为它应该)。
【解决方案3】:

总结:这是一个变量声明的问题。在使用你的数组之前,先声明它:

$page = array();

祝你好运与奇怪的服务器配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2020-06-02
    • 2019-11-29
    相关资源
    最近更新 更多