嵌套循环和数组形成

时间:2013-06-16 15:14:18

标签: php arrays loops nested-loops

假设我从一个看起来像这样的数组开始:

$array_1 = array(array(1,2,3), array(2,4,5), array(3,6,7));

为简单起见,假设我有一条规则说:删除第一个子数组,然后删除剩余子数组的第一个元素。这将产生结果:

$new_array  = array(array(4,5), array(6,7))

然后假设我将问题扩展到更大的数组,如:

$array_2 = array(array(1,2,3,4), array(2,3,4,5), array(3,4,5,6), array(4,5,6,7));

我在这里有相同的规则 - 删除第一个子阵列,然后删除剩余子阵列的第一个元素。 BUT 此规则必须继续,直到最小的子阵列只包含两个元素(如第一个示例中所示)。因此,在第一阶段的过程中,我的新数组看起来像:

$new_array_s1 = array(array(3,4,5), array(4,5,6), array(5,6,7));

但是在最后阶段,完成的数组看起来像:

$new_array_s2 = array(array(5,6), array(6,7));

对于上下文,这是我的$ array_1示例的代码:

<?php

$array_1 = array(array(1,2,3), array(2,4,5), array(3,6,7));
$array_shell = $array_1;
unset($array_shell[0]);
$array_size = count($array_shell);

$i = 0;
$cofactor = array();

while($i < $array_size) {
$el_part_[$i] = $array_1[$i];
unset($el_part_[$i][0]);
$el_part_[$i] = array_values($el_part_[$i]);
array_push($cofactor, $el_part_[$i]);

++$i;
}

echo '<pre>',print_r($cofactor,1),'</pre>';

?>

我的问题:如何推广此代码以适用于N大小的数组?

3 个答案:

答案 0 :(得分:3)

您不需要复杂的代码..只需循环并使用array_shift

示例:

print_r(cleanUp($array_1));

功能

function cleanUp($array) {
    array_shift($array);
    foreach($array as $k => $var) {
        is_array($var) && array_shift($array[$k]);
    }
    return $array;
}

See Live DEMO

答案 1 :(得分:1)

$num = count($array_1);
for($i=0;$i<=$num;$i++)
{
if($i==0)
unset($array_1[$i]);
else unset($array_1[$i][0]);
}

答案 2 :(得分:1)

建立Baba的答案,使用N个元素数组(假设每个数组包含相同数量的元素):

<?php
$array_1 = array(array(1,2,3,4), array(2,4,5,6), array(3,6,7,8));

$array = $array_1;
while(count($array[0]) > 2)
  $array = cleanUp($array);

print_r($array);

    function cleanUp($array) {
        array_shift($array);
        foreach($array as $k => $var) {
            is_array($var) && array_shift($array[$k]);
        }
        return $array;
    }

这将继续减少,直到子阵列只有2个元素。

-Ken