2011-11-24 104 views
1

我有一個數組$ data,我想用foreach打印它($ data as $ detail)。事情是我想要在foreach中打印上一個和下一個元素。事情是這樣的:帶有上一個和下一個元素的PHP foreach打印陣列

$data = array(1,2,3,4,5,6,7,8); 

// foreach result should look like this 
8,1,2 
1,2,3 
2,3,4 
3,4,5 
4,5,6 
5,6,7 
6,7,8 
7,8,1 
+1

你試圖做什麼?請發佈已經嘗試過的代碼。我們將幫助完成它 – robert

+0

向我們展示您迄今爲止的代碼。 – Wukerplank

+0

你知道如何使用數組索引嗎? –

回答

1

你可以去:

$data = array (1,2,3,4,5,6,7,8); 
$count = count ($data); 
foreach ($data as $key => $current) 
{ 
    if (($key - 1) < 0) 
    { 
    $prev = $data[$count - 1]; 
    } 
    else 
    { 
    $prev = $data[$key - 1]; 
    } 

    if (($key + 1) > ($count - 1)) 
    { 
    $next = $data[0]; 
    } 
    else 
    { 
    $next = $data[$key + 1]; 
    } 

echo $prev . ', ' . $current . ', ' . $next . "\n"; 

或者,如果簡潔是一個問題:

$count = count ($data); 
foreach ($data as $i => $current) 
{ 
    $prev = $data[(($i - 1) < 0) ? ($count - 1) : ($i - 1)]; 
    $next = $data[(($i + 1) > ($count - 1)) ? 0 : ($i + 1)]; 

    echo $prev . ',' . $current . ',' . $next . "\n"; 
} 
+0

此解決方案假定數組具有數字索引並且沒有漏洞。 – zrvan

0

相同的結果完成差異erently:

<?php 
$data = range(1,16); 
$count=count($data); 
$ret=''; 

for($i=0;$i<$count;$i++){ 
    $ret.=($i==0)?$data[$count-1].',':$data[$i-1].','; 
    $ret.=$data[$i].','; 
    $ret.=($i+1>=$count)?$data[$count-$i-1]:$data[$i+1].'<br>'; 
} 
echo $ret; 
?> 
Result: 
16,1,2 
1,2,3 
2,3,4 
3,4,5 
4,5,6 
5,6,7 
6,7,8 
7,8,9 
8,9,10 
9,10,11 
10,11,12 
11,12,13 
12,13,14 
13,14,15 
14,15,16 
15,16,1