2011-06-06 51 views
6

這更多的是關於PHP和數組內置功能的概念性問題。我想知道是否有辦法做到以下幾點:PHP數組問題

你有一個數組$a,這個數組包含5個元素(0-4)用於這個例子。

有沒有什麼辦法讓一個新的陣列,這將包含以下內容:

$b[0] = $a[0]; 
    $b[1] = $a[0] + $a[1]; 
    $b[2] = $a[0] + $a[1] + $a[2]; 
    $b[3] = $a[0] + $a[1] + $a[2] + $a[3]; 
    $b[4] = $a[0] + $a[1] + $a[2] + $a[3] + $a[4]; 
    etc.. 

我想象一個例子的它的使用將是一個網站,在那裏你可以點擊的任何目錄上的麪包屑給定的鏈接如/dir1/dir2/dir3/dir4

有什麼內置到PHP中,可以處理以這種方式建立一個數組?或者處理這個的函數的例子?或者甚至有更好的方式去解決這個問題。

謝謝!

編輯:這是通過你們的幫助最終的解決方案!這將建立鏈接,併爲每個目錄/元素創建適當的鏈接。

//$a is our array 


$max = count($a); 
foreach (range(1,$max) as $count) { 
    $b[] = implode("/", array_slice($a, 0, $count)); 
} 
foreach($b as $c) { 
    $x = explode('/' , $c); 
    $y = array_pop($x); 
    echo "<a href='$c'>".$y."</a>"."/"; 
} 

回答

4

如果你只是想在五種組合在那麼你的例子:

foreach (range(1,5) as $count) { 
    $b[] = implode("/", array_slice($a, 0, $count)); 
} 
+0

這完美地工作。我剛剛用所討論的數組的數目替換了'5',現在它可以動態地工作。 – 2011-06-06 01:25:10

+0

@Richard:如果有幫助,很酷! - 順便說一下,你現在有足夠的聲望也可以答覆答案。所以,花點時間在這裏也可以得到其他的答案(無論它是否有效,都可以表示讚賞,並保證你可以讓很多人回答你所有的下一個問題)。 – mario 2011-06-06 01:28:24

+0

感謝馬里奧,讓我讚不絕口!馬上回來。很好的解決方案。 – Ben 2011-06-06 01:29:25

1

在這種情況下,您最好使用遞歸函數。

$arr = array('dir1', 'dir2', 'dir3', 'dir4', 'dir5'); 

function breadcrumbs($a) 
{ 
    // Remove first value 
    $first = array_shift($a); 

    // Loop through other values 
    foreach ($a as $key => $value) 
    { 
    // Add first to remaining values 
    $a[$key] = $first . '/' . $value; 
    } 

    // Return array 
    return array($first) + breadcrumbs($a); 
} 

未經測試,但應該有效。它將使每個連續值包含數組之前的值。

0

我想,你想是這樣的:

for($i = 0; $i < count($a); $i++) 
    for($j = 0; $j < i + 1; $j++) 
    $b[i] += $a[j]; 
+2

+是一個數字運算符,不是PHP中的字符串運算符。這不起作用。它必須是。=,甚至這對他所問的都不起作用。 – 2011-06-06 01:41:27

1
$b = array(); 

for($i=0;$i<count($a);$i++) { 
    $b[] = array_sum(array_splice($a,0,$i)); 
}