如何在PHP中处理一个大的post数组,其中项目名称都是不同的,事先不知道?

时间:2010-03-28 15:21:30

标签: php arrays

我有一个PHP页面,用于查询数据库以填充表单,供用户修改数据并提交 该查询返回包含3个项目的行数:

  1. 图像标识
  2. ImageName
  3. ImageDescription
  4. PHP页面标题表单中的每个框都带有通用名称,并将ImageID附加到它。即:

    • ImageID_03
    • ImageName_34
    • ImageDescription_22

    由于未知哪些图像将从数据库中检索出来,因此我无法事先知道表单条目的名称。 表单同时处理大量条目。

    我的后端PHP表单处理器获取数据只是将其视为一个大数组:

    [imageid_2] => 2
    [imagename_2] => _MG_0214
    [imageid_10] => 10
    [imagename_10] => _MG_0419
    [imageid_39] => 39
    [imagename_39] => _MG_0420
    [imageid_22] => 22
    [imagename_22] => Curly Fern
    [imagedescription_2] => Wibble
    [imagedescription_10] => Wobble
    [imagedescription_39] => Fred
    [imagedescription_22] => Sally
    

    我已经尝试在它上面进行数组散步,将其拆分为3个数组,这些数组设置了地方但是卡住了:

    // define empty arrays
    $imageidarray = array();
    $imagenamearray = array();
    $imagedescriptionarray = array();
    
    // our function to call when we walk through the posted items array
    function assignvars($entry, $key)
    {
     if (preg_match("/imageid/i", $key)) { 
      array_push($imageidarray, $entry);
     } elseif (preg_match("/imagename/i", $key)) {
    //     echo " ImageName: $entry";
     } elseif (preg_match("/imagedescription/i", $key)) {
    //     echo " ImageDescription: $entry";
     }
    }
    
    array_walk($_POST, 'assignvars');
    

    失败并出现错误:
    array_push():第一个参数应该是......

    中的数组

    我接近这个错误吗?

4 个答案:

答案 0 :(得分:1)

是否可以更改表单上项目的命名方式?

电流:

  • ImageID_03
  • ImageName_34
  • ImageDescription_22

更改为:

  • ImageID [03]
  • ImageName [34]
  • ImageDescription [22]

这样它应该通过$ _POST作为三个独立的数组,这意味着你可以跳过所有额外的处理。

答案 1 :(得分:0)

  1. 我讨厌一次编辑多行。这是可用性故障
  2. 如果我这样做,我会用这样的形式制作:

    <form method="POST">
    <input type="text" name="name[1]">
    <input type="text" name="desc[1]">
    <input type="text" name="name[2]">
    <input type="text" name="desc[2]">
    ...etc
    </form>

  3. 所以,我有2个数组,$ _POST ['name']和$ _POST ['desc']其中id用作键

    在你的情况下,我不会使用array_walk,因为它只是一个语法糖,并使用foreach使其具有完整的数据处理控制权。

答案 2 :(得分:0)

我认为你需要

global $imageidarray;

访问函数内的全局数组。

答案 3 :(得分:0)

这样的东西也会起作用,假设你的三个表单字段总是一起提交:

$ids = preg_grep('/^imageid_(\d+)$/', array_keys($_POST)); // $ids now contains only the imageid_* keys

foreach($ids as $id) {
    $id = substr($ids, 8); // now contains the numeric id of the field
    echo $id, ": ", $_POST["imageid_$id"], "\n";
}

不如在表单名称中使用数组表示法有效,但允许您从一个字段名称中简单地提取ID号,然后使用它来访问其他匹配字段。