【问题标题】:Nested loops and array formation嵌套循环和数组形成
【发布时间】:2013-06-16 15:14:17
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays loops nested-loops


    【解决方案1】:

    您不需要复杂的代码 .. 只需循环并使用 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

    【讨论】:

      【解决方案2】:
      $num = count($array_1);
      for($i=0;$i<=$num;$i++)
      {
      if($i==0)
      unset($array_1[$i]);
      else unset($array_1[$i][0]);
      }
      

      【讨论】:

        【解决方案3】:

        根据 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-09-22
          • 1970-01-01
          • 2015-07-17
          • 1970-01-01
          • 2022-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多