2010-11-10 9 views
7

Mi matriz:obtener valores de matriz anteriores en foreach

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

continuación hago un foreach

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

que va de salida a Jan que des

mi pregunta es ¿cómo puedo visualizar la imagen anterior valores en la clave actual?

Por ejemplo, cuando llego a febrero, quiero mostrar enero también, cuando llegue a Jul, quiero mostrar Jun, etc.

Respuesta

33
$previousValue = null; 
foreach($arr as $ar){ 
    echo $ar; 
    if($previousValue) { 
    echo $previousValue; 
    } 
    $previousValue = $ar; 
} 
+0

Esto tiene la ventaja adicional de trabajar para matrices con cadenas e índices no secuenciales. – Aether

5

Puede utilizar las teclas para obtener la clave anterior.

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

También tienen prev() como un puntero interno:

$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'; 
+0

¿No se supone para mostrar actual y el anterior? tampoco morirá esto en la primera iteración? – dstarh

+0

esto no está sucediendo dentro de un bucle ... pero podría suceder. es relativo al puntero interno del elemento actual –

+0

El acercamiento 1 usando foreach no funciona para mí, simplemente da como nulo – pal4life

0
for ($i = 0; $i <count($arr); $i++) { 
    echo $arr[$i] 
    if($i > 0){ 
    echo $arr[$i-1] 
    } 
} 
+1

'$ arr.length' no es PHP,' $ i ++ 1' no significa nada ('$ i ++' en sí mismo se incrementa en uno) –

+0

typo y demasiados idiomas en mi cerebro: / – dstarh

1
reset($array); 
while($val=current($array)) 
{ 
    var_dump($val); // current 
    var_dump(prev($array)); // previous 
    next($array); // back to current 
    next($array); // next 
} 
0
foreach($arr as $key => $value){ 
    if ($key > 0) { 
    echo $arr[$key-1]; 
    } 
    echo $value; 
} 

Ver esta pregunta y answer.

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 />'; 
    } 
} 
0

Un poco más dinámico

$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; 
} 
Cuestiones relacionadas