PHP数组没有评估

时间:2014-05-17 03:41:03

标签: php arrays

我几乎不好意思把它说出来,但我很困惑,我正处于截止日期。可能是一个我看不到的简单拼写错误。

我有以下三行代码:($pPOST数组的一部分)

echo "<pre>";
print_r($p);
echo "Foo:".$p['fn2'];

输出就是这个。

Array
(
    ['fn1'] => uobQEC8IGQcd
    ['fn2'] => P1ZVSXBJzloE
)
Foo:

为什么不$p['fn2']打印?这让我疯了。我缩短了这个例子,但是那里还有更多的FN,没有一个会单独显示,但是当我转储数组时我可以看到它们。 Arrrgh!

更新:关于建议,多一点代码......这是在一个foreach循环中开始的:

foreach ($_POST['pairs'] as $key=>$p) {

更新2:

VARDUMP:

array(10) {
    ["'fn1'"]=> string(12) "uobQEC8IGQcd"
    ["'fn2'"]=> string(12) "P1ZVSXBJzloE"
    ["'state1'"]=> string(6) "active"
    ["'state2'"]=> string(6) "active"
    ["'crit1'"]=> string(2) "27"
    ["'crit2'"]=> string(2) "24"
    ["'warn1'"]=> string(2) "18"
    ["'warn2'"]=> string(2) "12"
    ["'owner2'"]=> string(5) "Adobe"
    ["'name2'"]=> string(5) "Rack1"
}

更新3:我正在设置这样的post变量数组(在js中)

$('<input>').attr({ type: 'hidden', name: "pairs["+fn1+"]['fn1']", value:fn1 }).appendTo('form');
$('<input>').attr({ type: 'hidden', name: "pairs["+fn1+"]['fn2']", value:fn2 }).appendTo('form');

3 个答案:

答案 0 :(得分:1)

它可能无法正常工作,因为您将密钥括在两组引号中,这会导致未定义的索引错误。如果你删除键周围的一对引号,它应该工作:

注意您的密钥: [“'fn1'”]

<?php

$p = array (  "state1" => "active",
              "state2" => "active",
              "crit1" => "27",
              "crit2" => "24",
              "warn1" => "18",
              "warn2" => "12",
              "owner2" => "Adobe",
              "name2" => "Rack1" 
            );

    echo "<pre>";
    print_r($p);
    echo "Foo:".$p['state2'];

?>

输出:

<pre>Array
(
    [state1] => active
    [state2] => active
    [crit1] => 27
    [crit2] => 24
    [warn1] => 18
    [warn2] => 12
    [owner2] => Adobe
    [name2] => Rack1
)
Foo:active

答案 1 :(得分:0)

啊哈! Vardump揭示了答案......当我从返回的javascript设置数组时,我正在这样做:

    $('<input>').attr({ type: 'hidden', name: "pairs["+fn1+"]['fn1']", value:fn1 }).appendTo('form');

而不是:

$('<input>').attr({ type: 'hidden', name: "pairs['+fn1+'][fn1]", value:fn1 }).appendTo('form');

不应该在数组元素周围有单引号......

答案 2 :(得分:0)

如果你这样写你的HTML。

<form method="post" action="test.php">
  <input name="value[test]"></input>
  <button type="submit">submit!</button>
</form>

您可以通过这种方式访问​​test.php。

var_dump($_POST["value"]["test"]);

否则,如果你这样做。

<form method="post" action="test.php">
  <input name="value['test']"></input>
  <button type="submit">submit!</button>
</form>

如果您尝试此操作,将会收到未定义的索引错误。

var_dump($_POST["value"]["test"]);

因为现在你应该这样访问。

var_dump($_POST["value"]["'test'"]);

换句话说,引号会自动添加。