在$ _POST中搜索数组键,PHP

时间:2011-01-27 21:05:09

标签: php multidimensional-array

我正在尝试添加像StackOverflow和Facebook使用的评论到我正在建立的网站。基本上,每个父帖都有自己的子评论。我打算用jQuery Ajax实现前端,但我正在努力解决如何最好地处理PHP后端。

由于每个表单字段具有相同的名称和ID会导致验证错误(可能是一些),我将父帖子的ID添加到每个表单字段。将传递的字段是commentID,commentBody,commentAuthor - 添加的ID将为commentTitle-12等。

由于每次处理新帖子时$_POST array_key都不同,我需要从-12键中删除$_POST(或者ID可能是什么),只留下commentTitle,commentBody等及其相关值。

实施例

$_POST['commentTitle-12']; //how it would be received after submission
$_POST['commentTitle']; //this is what I am aiming for

非常感谢

感谢CFreak -

//Basic example, not actual script
<?php
if (array_key_exists("send", $_POST)) {
    $title = $_POST['title'][0];
    $body = $_POST['body'][0];
    echo $title . ', ' . $body;
}
?>
<html>
<body>
<form name="test" id="test" method="post" action="">
<input type="text" name="title[]"/>
<input type="text" name="body[]"/>
<input type="submit" name="send" id="send"/>
</form>
</body>
</html>

更新2 哎呀,有点忘了它的全部意义 - 独特的名字(虽然已经确定1)这不是真正必要的2)可能更好,对于这个应用程序,使用jQuery代替这样做)

//Basic example, not actual script
    <?php
    if (array_key_exists("send", $_POST)) {
        $id = $_POST['id'];
        $title = $_POST['title'][$id];
        $body = $_POST['body'][$id];
        echo $title . ', ' . $body;
    }
    ?>
    <html>
    <body>
    <form name="test" id="test" method="post" action="">
    <input type="text" name="title[<?php echo $row['id'];?>]"/>
    <input type="text" name="body[<?php echo $row['id'];?>]"/>
    <input type="hidden" name="id" value="<?php echo $row['id']; //the ID?>"/>
    <input type="submit" name="send" id="send"/>
    </form>
    </body>
    </html>

2 个答案:

答案 0 :(得分:5)

PHP有一个小技巧可以从HTML表单中获取数组甚至多维数组。在HTML名称中您的字段如下:

<input type="text" name="commentTitle[12]" value="(whatever default value)" />

(你可以使用变量或其他东西放在“12”中,如果你正在做的那样,关键是[]括号。

然后在PHP中你会得到:

$_POST['commentTitle'][12]

然后,您可以循环浏览注释并通过索引ID获取每个注释。

您也可以将其作为空方括号放在HTML中:

<input type="text" name="commentTitle[]" value="(whatever default value)" />

如果您不关心实际的ID值是什么,那么只会使它成为从0开始的索引数组。

希望有所帮助。

答案 1 :(得分:0)

您只需遍历$_POST并搜索匹配的密钥:

function extract_vars_from_post($arr) {
    $result = array();
    foreach ($arr as $key => $val) {
        // $key looks like asdasd-12
        if (preg_match('/([a-z]+)-\d+/', $key, $match)) {
            $result[$match[1]] = $val;
        } else {
            $result[$key] = $val;
        }
    }

    return $result;
}

没有测试代码,不过