在foreach循环中

时间:2016-09-08 19:23:10

标签: php arrays breadcrumbs

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

从理论上讲,这看起来很简单,但背后的逻辑令人难以置信。任何帮助都会很棒,谢谢!

5 个答案:

答案 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 :)