1

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

$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));

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

$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 大小的数组?

4

3 回答 3

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;
}

观看现场演示

于 2013-06-16T15:18:52.963 回答
1
$num = count($array_1);
for($i=0;$i<=$num;$i++)
{
if($i==0)
unset($array_1[$i]);
else unset($array_1[$i][0]);
}
于 2013-06-16T15:24:28.340 回答
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 个元素。

-肯

于 2013-06-16T15:25:05.493 回答