我有以下php数组:
$month = array (
'weeks'=> array(
'w1'=> array(
'd1'=> 'day one',
'd2'=> 'day two',
'd3'=> array(
'H1' => 'hour one',
'H2' => 'hour two'
)
),
'w2'=> array(
'd1'=> 'day one',
'd2'=> 'day two'
)
)
);我希望递归地迭代数组,并更改键以反映从本月初开始的递增时间。像这样(简化):
$month = array (
'weeks'=> array(
'1'=> array(
'1'=> 'day one',
'2'=> 'day two',
'3'=> array(
'3' => 'hour one',
'4' => 'hour two'
)
),
'5'=> array(
'5'=> 'day one',
'6'=> 'day two'
)
)
);注意:当计数器向子计数器移动时,它不会增加。这反映了一周的开始时间和第一天的开始时间都有相同的时间戳。下一个兄弟姐妹的计数器增量和'key/value‘对之后的计数器增量没有子级。
发布于 2014-07-11 16:58:04
这是输出数组与输入结构完全匹配的“嵌套数组”的一个例子。唯一的区别是数组键被转换为“几乎”递增的整数下标。
“几乎”部分来自这样一个事实:当“嵌套”在一个级别时,第一个条目具有与前一个级别相同的下标。
我处理这个问题的方法是使用一个递归函数,它将处理“嵌套”,并在每个“级别”中使用一个“foreach”循环,因为数组中的每个条目在输出中保持相同的“级别”。
输出:这需要包含多个级别,而不是存储当前输出“级别”的下标路径,我只是传递一个数组“按引用”,该数组可以由适当的代码简单地设置。
代码:使用PHP 5.3.19在'viper-7‘处运行给定的输入
首先,完成工作的函数:
注意:$destWeeks和$idxNew变量作为“引用”传递,这允许代码直接修改它们。
function reindexWeeks($sourceWeeks, &$destWeeks, &$idxNew)
{
foreach($sourceWeeks as $sourceKey => $sourceValue) {
if (is_array($sourceValue)) {
$destWeeks[$idxNew] = array();
reindexWeeks($sourceValue, $destWeeks[$idxNew], $idxNew);
}
else {
$destWeeks[$idxNew] = $sourceValue;
$idxNew++;
}
}
}呼叫代码:
$idxNew = 1; // starting index.
$newWeeks = array(); // output array at the 'week' level
reindexWeeks($month['weeks'], $newWeeks, $idxNew); // re-index the array
// output array..
$newMonth = array('weeks' => $newWeeks);使用问题中提供的示例输出:
Array
(
[weeks] => Array
(
[1] => Array
(
[1] => day one
[2] => day two
[3] => Array
(
[3] => hour one
[4] => hour two
)
)
[5] => Array
(
[5] => day one
[6] => day two
)
)
)https://stackoverflow.com/questions/24690199
复制相似问题