Php foreach数组(然后拆分索引)

时间:2011-12-27 21:33:08

标签: php arrays foreach

我有$ _POST数组我需要的所有数据。

如果我print_r数组,我会看到类似的内容:

Array (
  [0_45_115] => 01
  [0_46_115] => 01
  [0_47_115] => 01
  [0_48_115] => 01
  [0_49_115] => 01
  [0_50_115] => 01
  [0_51_115] => 01
  [0_52_115] => 01
  [0_53_115] => 01
  [0_54_115] => 01
  [0_55_115] => 01
  [0_56_115] => 01
  [0_57_115] => 01
  [0_58_115] => 01
  [0_59_115] => 01
  [0_60_115] => 01
  [0_61_115] => 01
  [0_62_115] => 01
  [0_63_115] => 01
  [0_64_115] => 01
  [0_65_115] => 01
  [0_66_115] => 01
  [0_67_115] => 01
)

我从表单发布的索引(name attr)没有下划线。例如:

<input type="text" name="0 45 115" value="" />

让我们忘记这一点。

0_45_115索引将为我提供我想要更新的所有必要数据或在我的数据库中插入新行。价值会看到我想要的信息。

问题是我不知道如何管理数组。也许我必须使用foreach方法,我将使用split函数来拆分每行的索引。然后我会做所有其他的事情来插入/更新我的数据库。

我问我如何使用foreach$_POST数组中获取信息(索引数据)。

4 个答案:

答案 0 :(得分:1)

请参阅array_keys()功能 它将返回输入数组的所有键,而不是使用split()函数来处理键并获取所需的数据。

例如:

$keys = array_keys($yourArray);
foreach($keys as $k) {
    $data = split("_", $k);
    print $data[0];
    print $data[1];
    print $data[2];

}

答案 1 :(得分:1)

foreach( $yourArray as $k => $v ) { 

   $keys = explode( "_", $k) // for first iterate you will get array('0','45','115')

}

答案 2 :(得分:1)

根据PHP规范,空格将转换为下划线。有关详细信息,请参阅this page。具体来说,在页面中搜索此字符串:变量名称中的点和空格将转换为下划线。

我认为正确的做法是

foreach($_POST as $key => $value)
{
    $parts = explode('_', $key);    //split your $key
    //then deal with corresponding $value
}

答案 3 :(得分:0)

作为循环的替代方法,您可以使用array_map

array_map(function ($str) {return explode('_', $str);}, 
          array_keys($_POST));

结果:

array (
  array (
    0 => '0',
    1 => '45',
    2 => '115',
  ),
  array (
    0 => '0',
    1 => '46',
    2 => '115',
  ),
  array (
    0 => '0',
    1 => '47',
    2 => '115',
  ),
  ...

由于只有PHP 5.3及更新版本在语言级别具有匿名函数,因此如果需要支持早期的PHP版本,则循环是更好的选择。否则,你必须使用create_function,这只是丑陋。