在foreach循环中的某个索引之前添加所有数组元素

Prepend all array elements before a certain index in foreach loop

我正在尝试创建一个函数来格式化我的面包屑路径。我对我想做什么有一个基本的想法,但不确定如何实现它。我想在循环内的某个索引之前添加数组中的所有内容,并为该数组的每个元素执行此操作。我目前有以下代码,但问题是 $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'
);

理论上,这看起来很简单,但背后的逻辑让我有点困惑。任何帮助都会很棒,谢谢!

$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 )

您可以在原始数组的连续子集上使用循环调用 implode(),使用 array_slice

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

你可以像这样工作...

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

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

foreach ($breadcrumbs as $breadcrumb) {
    $string = $breadcrumbArray[] = $string.$slash.$breadcrumb;
    $slash = "/";
}
$prefix=null;
$formattedPath =  = array_map(function($a)use(&$prefix){
  return $prefix = ($prefix ? "$prefix/$a" : $a);
},$path);
//4+ answer, so no comment here :)

这里的这个函数将为您完成:

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'
);

和return:

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

所以你可以这样使用它:

$formattedPath = formatBreadcrumbs($path);

希望对您有所帮助。