PHP:奇怪的数组问题 - 我的价值在哪里?

时间:2009-04-09 09:17:22

标签: php arrays http-post-vars

我有一个数组($ 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?!?

3 个答案:

答案 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输出中有引号,显示实际密钥包含引号。