0

Array我从POSTPHP 中的操作中得到以下信息:

Array ( 
    [level-1] => 3 
    [quarter-1] => 1 
    [year-1] => 2014 
    [level-2] => 4 
    [quarter-2] => 2 
    [year-2] => 2014 
    [level-53] => 2 
    [quarter-53] => 1 
    [year-53] => 2013 
    [level-58] => 3 
    [quarter-58] => 2 
    [year-58] => 2014 
    [action] => store 
    [submit_values] => Store 
) 

我执行以下操作以从数组中获取值:

        $array=$_POST;
        foreach(array_chunk($array,3,true) as $val){
            foreach($val as $k=>$v){
               if(strpos($k, "level") !== false){
                 $temp    = explode("-",$k);
                 $id      = $temp[1];
                 $level   = $v;
                 }
             if(strpos($k, "quarter") !== false){
                 $quarter = $v;
             }
             if(strpos($k, "year") !== false){
                $year    = $v;
                }
            }
          echo "ID ".$id." Level ".$level." Quarter ".$quarter." Year ".$year;
          echo "<br>";
        }

但我得到的是以下内容:

ID 1 Level 3 Quarter 1 Year 2014
ID 2 Level 4 Quarter 2 Year 2014
ID 53 Level 2 Quarter 1 Year 2013
ID 58 Level 3 Quarter 2 Year 2014
ID 58 Level 3 Quarter 2 Year 2014

最后一行重复!我在代码中做错了什么?

4

3 回答 3

0

尝试这个:

$array = $_POST;
unset($array['submit_values']);
unset($array['action']); //...
于 2013-04-12T10:52:15.723 回答
0

您不使用 and 检查最后一个循环actionsubmit_values因此它返回最后保存的值

$array=$_POST;
    foreach(array_chunk($array,3,true) as $val){
        foreach($val as $k=>$v){
           if(strpos($k, "level") !== false){
             $temp    = explode("-",$k);
             $id      = $temp[1];
             $level   = $v;
             }
         elseif(strpos($k, "quarter") !== false){
             $quarter = $v;
         }
         elseif(strpos($k, "year") !== false){
            $year    = $v;
         }
         // if not one of ifs works
         else continue;
        }
      echo "ID ".$id." Level ".$level." Quarter ".$quarter." Year ".$year;
      echo "<br>";
    }

在循环后重置值也总是更好:

foreach(array_chunk($array,3,true) as $val){
    $id = '';
    $level = '';
    $quarter = '';
    $year = '';
于 2013-04-12T11:03:22.433 回答
0

当循环经过[action] = >store[submit_values] => Store时,控件不会进入任何 if 语句,因此在最后 2 个循环期间,它会打印先前设置的值

即,ID 58 Level 3 Quarter 2 Year 2014

解决方案:

尝试在 foreach 循环结束时将IDLevelQuarterYear重新初始化为" "(空白值) 。

于 2013-04-12T11:03:48.847 回答