2010-11-10 2 views
7

Моего массива:получить предыдущие значения массива в Еогеаспе

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

тогда я сделать Foreach

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

что будет выводить Январь в дез

мой вопрос, как я отображение предыдущего значения в текущем ключе?

Например, когда я добираюсь до февраля, я хочу, чтобы отобразить джан тоже, когда я получаю Юля, я хочу, чтобы отобразить Цзюнь, и т.д.

ответ

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

Это имеет дополнительное преимущество в работе для массивов со строковыми и непересекающимися индексами. – Aether

5

Вы можете использовать ключи, чтобы получить предыдущий ключ.

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

не это должно отобразить текущий и предыдущий? также не будет ли это умирать на первой итерации? – dstarh

+0

это не происходит внутри цикла ... но это может произойти. это относительно внутреннего указателя текущего элемента. –

+0

Подход 1, использующий foreach, не работает для меня, он просто дает значение – pal4life

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

'$ arr.length' не PHP,' $ i ++ 1' ничего не значит ('$ i ++' сам по себе увеличивается на единицу) –

+0

typo и слишком много языков в моем мозгу: / – 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; 
} 

Смотрите этот вопрос и 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

Побольше 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; 
} 
Смежные вопросы