Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在foreach循环中的某个索引之前,预先添加所有数组元素_Php_Arrays_Breadcrumbs - Fatal编程技术网

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

Php 在foreach循环中的某个索引之前,预先添加所有数组元素,php,arrays,breadcrumbs,Php,Arrays,Breadcrumbs,我正在尝试创建一个函数来格式化面包屑的路径。我有一个基本的想法,我想做什么,但不知道如何实施它。我想在循环中的某个索引之前预先处理数组中的所有内容,并对该数组的每个元素进行处理。我目前有以下代码,但问题是,$breadcrumbs[0]是由我定义的,我需要在PHP内部自动定义它 public static function formatBreadcrumbs ($path) { // Explode path into an array $breadcrumbs = explod

我正在尝试创建一个函数来格式化面包屑的路径。我有一个基本的想法,我想做什么,但不知道如何实施它。我想在循环中的某个索引之前预先处理数组中的所有内容,并对该数组的每个元素进行处理。我目前有以下代码,但问题是,
$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++;
}
测试$新的_数组应等于:

Array ( [0] => documents [1] => documents/text [2] => documents/text/work )
测试$新的_数组应等于:

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

您可以使用一个循环,使用
array\u slice
对原始数组的连续子集调用
内爆()

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

对于($i=1;$i您可以使用一个循环,该循环使用
array\u slice
对原始数组的连续子集调用
内爆()

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

对于($i=1;$i您可以这样工作

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

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

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

你可以这样工作

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

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

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

此函数将为您执行以下操作:

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;
}
并返回:

array(
    'documents',
    'documents/text',
    'documents/text/work'
);
所以你可以这样使用它:

$formattedPath = formatBreadcrumbs($path);

希望对您有所帮助。

此功能可帮助您:

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;
}
并返回:

array(
    'documents',
    'documents/text',
    'documents/text/work'
);
所以你可以这样使用它:

$formattedPath = formatBreadcrumbs($path);

希望有帮助。

聪明。我用了$count,但这看起来更漂亮。聪明。我用了$count,但这看起来更漂亮。像个符咒一样工作。非常感谢!没问题,但我个人更喜欢Martavis Griffin的答案。逻辑完全一样,但更干净。像个符咒一样工作。非常感谢!没问题,但我个人喜欢Martavis Griffin的答案参考Martavis Griffin的答案。逻辑完全相同,但更清晰。