Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 递增多维数组上的键_Php_Arrays - Fatal编程技术网

Php 递增多维数组上的键

Php 递增多维数组上的键,php,arrays,Php,Arrays,我有以下php数组: $month = array ( 'weeks'=> array( 'w1'=> array( 'd1'=> 'day one', 'd2'=> 'day two', 'd3'=> array( 'H1' => 'hour one', 'H2' => 'hour two' )

我有以下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'
        )
    )
);
我希望递归地迭代数组,并更改键以反映从月初开始的递增时间。与此类似(简化):


注意:计数器在下降到子级时不会递增。这反映了一周的开始时间和第一天的开始时间都具有相同的时间戳。下一个同级的计数器递增,并且在“键/值”对没有子级后计数器递增

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

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

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

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

代码:

首先是执行工作的功能:

注意:$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
                )

        )

)

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

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

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

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

代码:

首先是执行工作的功能:

注意:$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
                )

        )

)

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

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

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

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

代码:

首先是执行工作的功能:

注意:$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
                )

        )

)

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

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

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

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

代码:

首先是执行工作的功能:

注意:$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
                )

        )

)

您必须为此编写自己的函数,可能需要使用一个递归调用的foreach循环和一个静态计数器。如果您这样做了,但它不起作用,请展示您的代码,我们可以提供帮助。您必须为此编写自己的函数,可能使用递归调用的foreach循环和静态计数器。如果您这样做了,但它不起作用,请展示您的代码,我们可以提供帮助。您必须为此编写自己的函数,可能使用递归调用的foreach循环和静态计数器。如果您这样做了,但它不起作用,请展示您的代码,我们可以提供帮助。您必须为此编写自己的函数,可能使用递归调用的foreach循环和静态计数器。如果您这样做了,但它不起作用,请显示您的代码,我们可以提供帮助。非常优雅/简洁。在我的尝试中,我没有通过引用。非常优雅/简洁。在我的尝试中,我没有通过引用。非常优雅/简洁。在我的尝试中,我没有通过引用。非常优雅/简洁。在我的尝试中,我没有通过引用。