2011-06-06 49 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)); 
}