18

My array :

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

then i do a foreach

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

that will output jan to des

my question is how do i display the previous values in current key?

For example, when I get to feb, I want to display jan too, when I get to jul, i want to display jun, etc.

Henson
  • 5,563
  • 12
  • 46
  • 60

7 Answers7

56
$previousValue = null;
foreach($arr as $ar){
  echo $ar;
  if($previousValue) {
    echo $previousValue;
  }
  $previousValue = $ar;
}
Matt Williamson
  • 39,165
  • 10
  • 64
  • 72
  • 1
    This has the added advantage of working for arrays with string and non-sequential indices. – Aether Nov 10 '10 at 21:58
12

You can use the keys to get the previous key.

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

You also have prev() as an internal array pointer:

$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';
Elzo Valugi
  • 27,240
  • 15
  • 95
  • 114
2
reset($array);
while($val=current($array))
{
    var_dump($val); // current
    var_dump(prev($array)); // previous
    next($array); // back to current
    next($array); // next
}
bcosca
  • 17,371
  • 5
  • 40
  • 51
1
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 />';
    }
}
ansidev
  • 361
  • 1
  • 3
  • 17
Drew
  • 116
  • 4
0
for ( $i = 0; $i <count($arr); $i++) {
    echo $arr[$i]
    if($i > 0){
     echo $arr[$i-1]
   }
}
dstarh
  • 4,976
  • 5
  • 36
  • 68
0
foreach($arr as $key => $value){
  if ($key > 0) {
   echo $arr[$key-1];
  }
  echo $value;
}

See this question and answer.

Community
  • 1
  • 1
Thilo
  • 17,565
  • 5
  • 68
  • 84
0

A little more Dynamic

$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;
}
ansidev
  • 361
  • 1
  • 3
  • 17
dazzafact
  • 2,570
  • 3
  • 30
  • 49