2010-11-10 40 views
7

我的數組:獲得前一陣值的foreach

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

然後我做一個foreach

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

,將輸出一月到DES

我的問題是如何顯示上一當前鍵中的值?

例如,當我到二月,我想顯示揚太,當我到七月,我想顯示鈞等

回答

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

這對於使用字符串和非順序索引的數組來說具有額外的優勢。 – Aether 2010-11-10 21:58:57

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 2010-11-10 20:03:14

+0

這不會發生在一個循環內,但它可能會發生。它是相對於當前元素的內部指針 – 2010-11-10 20:05:18

+0

使用foreach的方法1不適用於我,它只是給出了空值 – pal4life 2016-09-16 19:46:49

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 ++'本身增加1) – 2010-11-10 20:03:11

+0

錯字和太多語言在我的大腦中:/ – dstarh 2010-11-10 20:04:59

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

多一點動態

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