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