我的foreach循环获取$ _POST数据,使用explode
分隔$key
的id号,以便我可以在db中使用这些id号。最后,我继续创建基于id号
除了我错过最后一个子数组外,这个工作正常。 I $ _POST数据应该变成16个子数组,但我只得到15.当我在foreach之前var_dump $ _POST时,我显示全部16.当我在foreach之后但在{{之前的var_dump由爆炸定义的变量时1}},我可以看到第16个子数组数据减去一个元素,即id号。
那么为什么会爆炸失去最后一个元素呢?限制似乎不适用于此,strtok或preg_split似乎没有完成我需要完成的工作。
顺便说一下,我尝试将count语句修改为if{}
,我确实获得了第16个id和子数组,但也加载了未定义的偏移量:1个错误,最终是空数据集。
if(count($newgamearr)>0);
这是var_dump输出(来自foreach之前):
array(55){[“gameID1”] => string(1)“1”[“ats1”] => string(3)“SEA” [ “OU1”] => string(4)“OVER”[“winner1”] => string(3)“SEA”[“lck1”] => string(0)“”[“gameID2”] => string(1)“2”[“ats2”] => string(2)“NO” [ “OU2”] => string(4)“OVER”[“winner2”] => string(2)“NO”[“lck2”] => string(0)“”[“gameID3”] => string(1)“3”[“ats3”] => string(3)“STL” [ “OU3”] => string(4)“OVER”[“winner3”] => string(3)“STL”[“lck3”] => string(0)“”[“gameID4”] => string(1)“4”[“winner4”] => string(0)“” [ “lck4”] => string(0)“”[“gameID5”] => string(1)“5”[“winner5”] => string(0)“”[“lck5”] => string(0)“”[“gameID6”] => string(1)“6” [ “winner6”] => string(0)“”[“lck6”] => string(0)“”[“gameID7”] => string(1)“7”[“winner7”] => string(0)“”[“lck7”] => string(0)“” [ “gameID8”] => string(1)“8”[“winner8”] => string(0)“”[“lck8”] => string(0)“”[“gameID9”] => string(1)“9”[“winner9”] => string(0)“” [ “lck9”] => string(0)“”[“gameID10”] => string(2)“10”[“winner10”] => string(0)“”[“lck10”] => string(0)“”[“gameID11”] => string(2)“11” [ “winner11”] => string(0)“”[“lck11”] => string(0)“”[“gameID12”] => string(2)“12”[“winner12”] => string(0)“”[“lck12”] => string(0)“” [ “gameID13”] => string(2)“13”[“winner13”] => string(0)“”[“lck13”] => string(0)“”[“gameID14”] => string(2)“14”[“winner14”] => string(0)“” [ “lck14”] => string(0)“”[“gameID15”] => string(2)“15”[“winner15”] => string(0)“”[“lck15”] => string(0)“”[“gameID16”] => string(2)“16” [ “winner16”] => string(0)“”[“lck16”] => string(0)“”[“submitPicks”] => string(13)“提交精选!” }
答案 0 :(得分:1)
if($gamearr['gameid'])
的第一次检查不匹配,因为该值仍然为空。
你在这里做的是将加法委托给$mainarray
进行循环的下一次迭代,我假设你的数据在过程中会不同步,与其他数据相匹配随后的游戏ID。
将$mainarr
向下移动,将$gamearr['gameid']
定义为当前$newgameID
:
if(count($newgameID) > 1) {
$gamearr = $template;
$gamearr['gameid'] = $newgameID[1];
$gamearr['userid'] = $userid;
if($gamearr['gameid']) {
$mainarray[] = $gamearr;
}
continue;
}
此外,在此移动之后,由于您已经确认存在$newgameID
,因此if($gamearr['gameid'])
是多余的,因此您可以将该条件剪掉。
====编辑:另一种方式...... ====
你可以这样做而不是缩短它:
foreach($_POST as $key=>$post_data) {
preg_match("#([a-zA-Z]+)([0-9]+)#", $key, $data);
if (isset($data[2])) {
$id = $data[2];
$var = strtolower($data[1]);
if ($var == 'gameid') continue; // Unless you want to add that in too.
$mainarray[$id][$var] = $post_data;
}
}
为$mainarray
添加更整洁的布局,您也不需要$template
,因为它只是小写的键。 :)