我有一个数组($ form)从$ _POST中恢复一些信息:
$form = $_POST['game'];
现在我想使用这个数组中的值,但我不知何故失败了。
对于调试我使用了这些命令(顺序完全相同,中间没有多余的行):
print_r($form);
echo '#' . $form['System_ID'] . "#";
并且作为返回的输出我得到:
Array
(
['Title'] => Empire: Total War - Special Forces
['Genre_ID'] => 1
['Type'] => Spiel
['System_ID'] => 1
)
##
我的System_ID去过哪些想法?它在print_r中,但不在下一行中用于echo?!?
答案 0 :(得分:7)
好吧,我自己找到了解决方案(a.k.a. d'oh!)
我添加了另一个
var_dump($form);
进一步分析,这就是我得到的:
array(4) {
["'Title'"]=>
string(34) "Empire: Total War - Special Forces"
["'Genre_ID'"]=>
string(1) "1"
["'Type'"]=>
string(5) "Spiel"
["'System_ID'"]=>
string(1) "1"
}
请注意双引号内的单引号?
看起来好像你不允许在html表单中使用单引号,或者它们将包含在数组键中:
Wrong: <input type="text" name="game['Title']" />
Correct: <input type="text" name="game[Title]" />
答案 1 :(得分:3)
print_r()不会在键周围加上引号 - 为了调试我建议完全抛弃print_r。 var_export或var_dump更好。
更好:使用firephp。它通过标头发送调试信息,因此它不会搞砸你的输出,因此甚至可以与ajax一起使用。输出与firebug很好地显示,包括数据结构的语法着色。
它更容易使用:只需fb($myvar);
答案 2 :(得分:-1)
它对我有用:
<?
$form['System_ID'] = 1;
print_r($form);
echo '#' . $form['System_ID'] . '#';
?>
输出:
% php foo.php
Array
(
[System_ID] => 1
)
#1#
PHP 5.2.6,在Fedora Core 10上
编辑 - 请注意这里有一个真正原因的暗示。在我的代码中,print_r
输出(正确)显示了没有单引号的数组键。原始海报的密钥 在print_r
输出中有引号,显示实际密钥包含引号。