PHP数组问题

时间:2011-06-06 01:11:38

标签: php arrays breadcrumbs

这是一个关于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 个答案:

答案 0 :(得分:4)

如果您只想要示例中的五种组合:

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

答案 1 :(得分: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);
}

未经测试,但应该有效。它将使每个顺序值包含数组中它之前的值。

答案 2 :(得分:1)

$b = array();

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

答案 3 :(得分:0)

我想,你想要这样的东西:

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