2016-09-08 89 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); 

希望它能幫助。

相關問題