我有一个表单,其中包含许多名称为 item1、item2、item13、item43 等的字段,每次这些字段都不同,因为它们是使用 AJAX 填充在表单中的。
当用户提交时,我需要执行以下操作:
foreach ($_POST['itemX']['tagsX'] as $tag) {
inserttag($tag, X);
}
其中 X = 1,2,13,43 等。如何迭代 $_POST 值并仅对名称以“item”开头后跟 X 标识符的值执行上述操作?
发布的数据具有以下格式:
$_POST = [
'item38' => ['tags38' => ['aaa', 'bbb']],
'item40' => ['tags40' => ['ccc', 'ddd']],
'item1' => ['tags1' => ['eee', 'zzz']],
];
foreach($_POST as $key => $value)
{
if (strstr($key, 'item'))
{
$x = str_replace('item','',$key);
inserttag($value, $x);
}
}
您可以使用
$_POST
循环遍历 foreach
,如下所示:
foreach ($_POST as $key => $value) { ... }
在循环中,您可以评估循环找到的每个键是否符合您的标准。像这样的东西:
foreach ($_POST as $key => $value){
if (substr($key, 0, 4) == "item") {
$identifier = substr($key, 4);
if (isset($value['tag' . $identifier])) { inserttag('tag', $identifier); }
}
}
我不能 100% 确定什么是真实的,什么只是你问题中的占位符。也许我把某些事情当作了确凿的事实,但实际上并非如此。您可能需要更详细地解释您的愿望。 ;)
尝试:
foreach($_POST as $key=>$value){
inserttag($key, $value);
}
$key
将是元素的名称,$value
将是值。
循环遍历
$_POST
并查看该键是否包含 'item'
。
foreach($_POST as $key=>$value){
if(preg_match('/item(\d*)/', $key, $match) === 1){
inserttag($value, $match[1]);
}
}
如果您的商品编号是连续的,则可以使用 FOR 来达到此目的。将数字 ($i) 与索引上的项目名称连接起来,如下所示:
for ($i=0; $i <= $numbeOfItems; $i++) {
inserttag($_POST['item' . $i]['tags' . $i]), $i;
}
使用
sscanf()
通过一次函数调用来验证和提取标识整数。
代码:(演示)
foreach ($_POST as $itemId => $set) {
if (sscanf($itemId, 'item%d', $id)) {
foreach ($set["tags$id"] as $v) {
inserttag($v, $id);
}
}
}