爆炸后PHP foreach数组缺少最后一个元素,计数函数

时间:2015-05-30 20:56:35

标签: php arrays foreach count explode

我的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)“提交精选!” }

1 个答案:

答案 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,因为它只是小写的键。 :)