我试图创建一个能够格式化我的面包屑路径的函数。我有一个基本的想法,我想做什么,但不知道如何实现它。我想在循环中的某个索引之前添加数组中的所有内容,并为该数组的每个元素执行此操作。我目前有以下代码,但问题是我$breadcrumbs[0]
正在定义,我需要在PHP中自动定义它。
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'
);
从理论上讲,这看起来很简单,但背后的逻辑令人难以置信。任何帮助都会很棒,谢谢!
答案 0 :(得分: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 )
答案 1 :(得分:1)
你可以像这样工作......
$breadcrumbs = array(
'documents',
'text',
'work'
);
$slash = '';
$string = '';
$breadcrumbArray = Array();
foreach ($breadcrumbs as $breadcrumb) {
$string = $breadcrumbArray[] = $string.$slash.$breadcrumb;
$slash = "/";
}
答案 2 :(得分: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);
希望它有所帮助。
答案 3 :(得分:0)
您可以使用implode()
在原始数组的连续子集上使用调用array_slice
的循环。
$formattedBreadcrumbs = array();
$len = count($breadcrumbs);
for ($i = 1; $i <= $len; $i++) {
$formattedBreadcrumbs[] = implode('/', array_slice($breadcrumbs, 0, $i);
}
答案 4 :(得分:0)
$prefix=null;
$formattedPath = = array_map(function($a)use(&$prefix){
return $prefix = ($prefix ? "$prefix/$a" : $a);
},$path);
//4+ answer, so no comment here :)