我有一个包含多个名称为item1,item2,item13,item43等的字段的表单,每次这些字段都不同,因为它们是使用AJAX填充在表单中的。
当用户提交时,我需要执行以下操作:
foreach($_POST['itemX']['tagsX'] as $tag){
inserttag($tag, X);
}
其中X = 1,2,13,43等。如何迭代$ _POST值并仅对其名称以“item”开头的值后跟X标识符的值执行上述操作?
基于Piontek答案的解决方案:
发布的数据具有以下格式:
[item38] => Array([tags38] => Array([0] => aaa,[1] => bbb))
[item40] => Array([tags40] => Array([0] => ccc,[1] => ddd))
[item1] => Array([tags1] => Array([0] => eee,[1] => zzz))
这就是我解析和使用它的方式:
foreach($_POST as $key => $value){
if (strstr($key, 'item')){
$id = str_replace('item','',$key);
foreach($_POST['item'.$id]['tags'.$id] as $tag){
inserttag($tag, $id);
}
}
}
答案 0 :(得分:29)
foreach($_POST as $key => $value)
{
if (strstr($key, 'item'))
{
$x = str_replace('item','',$key);
inserttag($value, $x);
}
}
答案 1 :(得分:5)
您可以像$_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); }
}
}
我不是百分之百确定实际上什么是真实的,而你的问题只是一个占位符。也许我拿了一些东西,但事实并非如此。您可能需要更详细地解释您的愿望。 ;)
答案 2 :(得分:2)
尝试:
foreach($_POST as $key=>$value){
inserttag($key, $value);
}
$key
将是元素的名称,$value
将是值。
答案 3 :(得分:1)
循环浏览$_POST
并查看密钥是否包含'item'
。
foreach($_POST as $key=>$value){
if(preg_match('/item(\d*)/', $key, $match) === 1){
inserttag($value, $match[1]);
}
}
答案 4 :(得分:0)
如果您的商品编号是连续的,则可以为此目的使用 FOR。将数字 ($i) 与索引上的项目名称连接起来,如下所示:
for ($i=0; $i <= $numbeOfItems; $i++) {
inserttag($_POST['item' . $i]['tags' . $i]), $i;
}