【问题标题】:get previous array values in foreach在 foreach 中获取先前的数组值
【发布时间】:2011-05-08 02:29:23
【问题描述】:

我的数组:

$arr = array("jan","feb","mar","apr","mei","jun","jul","agu","sep","okt","nov","des");

然后我做一个 foreach

foreach($arr as $ar){
  echo $ar;
}

这会将jan输出到des

我的问题是如何在当前键中显示以前的值?

例如,当我到了 2 月,我也想显示 jan,当我到了 7 月,我想显示 jun,等等。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以使用密钥来获取上一个密钥。

    foreach($arr as $key => $ar){
        $prev = $arr[$key-1];
        echo  "previous value -" .$prev;
    }
    

    您还拥有prev() 作为内部数组指针:

    $transport = array('foot', 'bike', 'car', 'plane');
    $mode = current($transport); // $mode = 'foot';
    $mode = next($transport);    // $mode = 'bike';
    $mode = next($transport);    // $mode = 'car';
    $mode = prev($transport);    // $mode = 'bike';
    $mode = end($transport);     // $mode = 'plane';
    

    【讨论】:

    • 这不是应该显示当前和以前的吗?这也不会在第一次迭代中死掉吗?
    • 这不是在循环中发生的......但它可能会发生。它是相对于当前元素的内部指针
    • 这仅在您的键是整数且按顺序排列时才有效
    【解决方案2】:
    $previousValue = null;
    foreach($arr as $ar){
      echo $ar;
      if($previousValue) {
        echo $previousValue;
      }
      $previousValue = $ar;
    }
    

    【讨论】:

    • 这具有处理具有字符串和非顺序索引的数组的额外优势。
    【解决方案3】:
    for ( $i = 0; $i <count($arr); $i++) {
        echo $arr[$i]
        if($i > 0){
         echo $arr[$i-1]
       }
    }
    

    【讨论】:

      【解决方案4】:
      reset($array);
      while($val=current($array))
      {
          var_dump($val); // current
          var_dump(prev($array)); // previous
          next($array); // back to current
          next($array); // next
      }
      

      【讨论】:

        【解决方案5】:
        foreach($arr as $key => $value){
          if ($key > 0) {
           echo $arr[$key-1];
          }
          echo $value;
        }
        

        看到这个问题和answer

        【讨论】:

          【解决方案6】:
          foreach ($arr as $key => $ar) {
              //check we aren't on jan (otherwise we get $key = -1 which doesn't work)
              if ($key != 0) {
                  //print previous month followed by current month
                  echo $arr[$key - 1] . '-' . $ar . '<br />';
              }
          }
          
          //OR, if you want to be able to roll through years then:
          
          $last_key = end(array_keys($arr));
          foreach ($arr as $key => $ar) {
              //check we aren't on jan
              if ($key != 0) {
                  //print previous month followed by current month
                  echo $arr[$key - 1] . ' - ' . $ar . '<br />';
              } else {
                  echo $arr[$last_key] . ' - ' . $ar . '<br />';
              }
          }
          

          【讨论】:

            【解决方案7】:

            多一点动态

            $arr  = array(
                "jan",
                "feb",
                "mar",
                "apr",
                "mei",
                "jun",
                "jul",
                "agu",
                "sep",
                "okt",
                "nov",
                "des"
            );
            $arr2 = $arr;
            foreach ($arr as $k => $currVal) {
                unset($arr2[$k]);
                foreach ($arr2 as $k => $v) {
                    $nextVal = $v;
            
                    break;
                }
                echo "next val: " . $nextVal;
                echo "current val: " . $currVal;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-11-30
              • 2012-08-25
              • 1970-01-01
              • 2011-02-11
              • 1970-01-01
              • 1970-01-01
              • 2017-03-22
              • 2021-03-03
              相关资源
              最近更新 更多