2016-09-08 49 views
0

我试图创建一个函数来格式化我的面包屑的路径。我对我想要做什么有一个基本的想法,但不知道如何实现它。我想在循环内的某个索引之前预先写入数组中的所有内容,并对该数组的每个元素执行此操作。我目前有以下代码,但问题是$breadcrumbs[0]正在由我定义,我需要它在PHP内自动定义。在foreach循环中的某个索引之前加上所有数组元素

public static function formatBreadcrumbs ($path) { 
    // Explode path into an array 
    $breadcrumbs = explode('/', $path); 

    $counter = 0; 

    foreach ($breadcrumbs as $breadcrumb) { 
     if ($breadcrumb !== $breadcrumbs[0]) { 
      $formattedBreadcrumbs[] = $breadcrumbs[0] . '/' . $breadcrumb; 
     } 
    } 

    var_dump($formattedBreadcrumbs); 
} 

例如,如果我输入数组如:

$path = array(
    'documents', 
    'text', 
    'work' 
); 

我希望我的功能输出:

$formattedPath = array(
    'documents', 
    'documents/text', 
    'documents/text/work' 
); 

从理论上讲,这似乎很简单,但背后的逻辑这让我的脑海里有点惊慌。任何帮助将是伟大的,谢谢!

回答

1
$path = array(
    'documents', 
    'text', 
    'work' 
); 

$cur_path = ''; 
$new_array = array(); 
$count = 0; 
foreach($path as $path_item) 
{ 
    if($count == 0) 
    { 
     $cur_path = $path_item; 
    } 
    else 
    { 
     $cur_path .= '/' . $path_item; 
    } 

    $new_array[] = $cur_path; 
    $count++; 
} 

经过测试。 $ new_array应该等于:

Array ([0] => documents [1] => documents/text [2] => documents/text/work) 
+0

像魅力一样工作。非常感谢你! –

+0

没问题,但我个人比较喜欢Martavis Griffin的回答。这是完全一样的逻辑,但更干净。 – Lynne

0

您可以使用一个循环,呼吁原数组的连续子集implode(),使用array_slice

$formattedBreadcrumbs = array(); 
$len = count($breadcrumbs); 
for ($i = 1; $i <= $len; $i++) { 
    $formattedBreadcrumbs[] = implode('/', array_slice($breadcrumbs, 0, $i); 
} 
1

您可以解决这样的事情...

$breadcrumbs = array(
'documents', 
'text', 
'work' 
); 

$slash = ''; 
$string = ''; 
$breadcrumbArray = Array(); 

foreach ($breadcrumbs as $breadcrumb) { 
    $string = $breadcrumbArray[] = $string.$slash.$breadcrumb; 
    $slash = "/"; 
} 
+0

聪明。我使用了$ count,但这看起来更好看。 – Lynne

0
$prefix=null; 
$formattedPath = = array_map(function($a)use(&$prefix){ 
    return $prefix = ($prefix ? "$prefix/$a" : $a); 
},$path); 
//4+ answer, so no comment here :) 
1

这里,此功能会为你做这一点:

function formatBreadcrumbs ($path) { 
    $exitArray = array(); 
    $temp = ''; 

    for ($i = 0;$i < sizeof($path);$i++) 
    { 
     if ($temp == '') 
      $temp = $path[$i]; 
     else 
      $temp = $temp . '/' . $path[$i]; 

     $exitArray[$i] = $temp; 
    } 

    return $exitArray; 
} 

这需要输入,如:

$path = array(
    'documents', 
    'text', 
    'work' 
); 

与回归:

array(
    'documents', 
    'documents/text', 
    'documents/text/work' 
); 

所以你可以使用它像这样:

$formattedPath = formatBreadcrumbs($path); 

希望它能帮助。

相关问题