Php Can';t使用变量指定索引来访问数组中的值
我有以下代码:Php Can';t使用变量指定索引来访问数组中的值,php,Php,我有以下代码: $id = $_GET['id']; echo '<br>' . 'id: ' . $id . '<br><br>'; echo '<pre>'; print_r($itemQtys); echo '</pre>'; echo '<br>' . 'itemqtys[id]: ' . $itemQtys[$id] . '<br>'; echo '<br>'
$id = $_GET['id'];
echo '<br>' . 'id: ' . $id . '<br><br>';
echo '<pre>';
print_r($itemQtys);
echo '</pre>';
echo '<br>' . 'itemqtys[id]: ' . $itemQtys[$id] . '<br>';
echo '<br>' . 'id: ' . $id . '<br>';
$id=$\u GET['id'];
回音“
”id:'$身份证。”
';
回声';
打印($itemQtys);
回声';
回音“
”itemqtys[id]:'$itemQtys[$id]。'
';
回音“
”id:'$身份证。”
';
输出为:
身份证号码:5
数组(
[5] =>12
) itemqtys[id]: 身份证号码:5 如您所见,当我尝试使用$id变量作为键访问数组中的值时,没有返回任何值。但是,当我这样做时:
echo'
'itemqtys[5]:'$itemQtys[5]。'
';
结果是:
itemqtys[5]:12
为什么我不能使用变量来指定数组中的索引?调试时使用var\u dump()检查值。注意,var dump告诉您字符串长度。右键单击>调试时查看html源代码
我猜$id是一个字符串,后面有空格字符
$id
可能不包含您期望的内容,请先将其转换为整数
将第一行更改为:
$id=(int)$\u GET['id']
$\u GET['id']
返回一个字符串,在将其用作数组索引之前,必须将其强制转换为int
。其中是$id
?在你的例子中没有设置任何内容。你是如何创造它的?我不认为它是如何获得的是相关的,因为我展示了它的价值。不过,为了回答您的问题,我更新了我的问题:它作为GET值传递。ini\u set('display\u errors',1)
在脚本开始时(或阅读错误日志),您可能会看到一条警告,指出$id
并非您所期望的那样。php会自动将数组键的字符串转换为int(反之亦然)。“在将其传递给你的数组之前,你必须将其转换为int。”--不,他们不必:@zerkms,我认为你不完全正确。如果您访问像$itemQtys['5']
这样的数组,它将被正确地强制转换。但是如果有空格(这在用户输入中完全可能),它不会强制转换值,而是将其视为字符串:$itemQtys['5']
。因此,修剪或更好地铸造用户输入不是一个坏主意@zerkms你是对的,但在我看来,当你知道你需要一个整数时,使用字符串似乎是一种不好的做法。@Ctechnology:是的,但回答者没有明确说明这一点,并说必须强制转换为整数,但没有解释原因。没有这样的例子,答案本身看起来就不正确。“因此,调整或更好地转换用户输入并不是一个坏主意”--这是一个好主意,但不是一个要求。ilanco-感谢您提出的关于类型转换GET值的建议。我想我会从现在开始这样做,以防止这个问题再次发生。谢谢。“我猜$id是一个字符串,后面有空格字符”听起来对我来说很有答案(而且很可能是错误)。我觉得我的答案其实很好——我都教如何钓鱼,还教了一条鱼。“我觉得我的答案其实很好——我都教如何钓鱼,还教了一条鱼。”哈哈!是的,你的回答很好。非常感谢。我通过函数is_numeric()检查id是否是一个数字,但显然在PHP中,某些东西仍然可以是一个数字,即使前面有空格!谢谢
echo '<br>' . 'itemqtys[5]: ' . $itemQtys[5] . '<br>';