首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增加多维数组上的键

增加多维数组上的键
EN

Stack Overflow用户
提问于 2014-07-11 04:36:58
回答 1查看 1.4K关注 0票数 0

我有以下php数组:

代码语言:javascript
复制
$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'
        )
    )
);

我希望递归地迭代数组,并更改键以反映从本月初开始的递增时间。像这样(简化):

代码语言:javascript
复制
$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‘对之后的计数器增量没有子级。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-11 16:58:04

这是输出数组与输入结构完全匹配的“嵌套数组”的一个例子。唯一的区别是数组键被转换为“几乎”递增的整数下标。

“几乎”部分来自这样一个事实:当“嵌套”在一个级别时,第一个条目具有与前一个级别相同的下标。

我处理这个问题的方法是使用一个递归函数,它将处理“嵌套”,并在每个“级别”中使用一个“foreach”循环,因为数组中的每个条目在输出中保持相同的“级别”。

输出:这需要包含多个级别,而不是存储当前输出“级别”的下标路径,我只是传递一个数组“按引用”,该数组可以由适当的代码简单地设置。

代码:使用PHP 5.3.19在'viper-7‘处运行给定的输入

首先,完成工作的函数:

注意:$destWeeks和$idxNew变量作为“引用”传递,这允许代码直接修改它们。

代码语言:javascript
复制
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++;
        }
    }
}

呼叫代码:

代码语言:javascript
复制
$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);

使用问题中提供的示例输出:

代码语言:javascript
复制
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
                )

        )

)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24690199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档