递归数组

时间:2012-06-03 19:07:35

标签: php arrays recursion

我已经花了几个小时搞清楚这个,但没有任何可用的结果。 也许有人可以帮我解决这个问题,我想在课堂上使用它 我想构建一个方法,作为输入数组和输出重建数组

我有这个数组:

     Array
     (
         [0] => Array
             (
                 [5] => 0-5
                 [8] => 0-8
                 [9] => 0-9
                 [10] => 0-10
             )

         [10] => Array
             (
                 [11] => 10-11
                 [12] => 10-12
             )

         [11] => Array
             (
                 [13] => 11-13
             )

         [12] => Array
             (
                 [14] => 12-14
             )

     )

这个数组应该转换为这个数组:

     Array
     (
         [0] => 0-5
         [1] => 0-8
         [2] => 0-9
         [3] => Array
             (
                 [0] => 0-10
                 [1] => Array
                     (
                         [0] => 10-11
                         [1] => Array
                             (
                                 [0] => 11-13
                             )

                         [2] => 10-12
                         [3] => Array
                             (
                                 [0] => 12-14
                             )

                     )

             )

     )

EDIT1:示例的值也是数组en我想要处理一些动作。例如0-9是一个动作并停止但0-10有孩子。如果0-10结束并返回true或false,则触发下一个子节点。如果是真的10-11否则10-12。这是我第一次在这个论坛上抱歉给您带来不便

EDIT2:也许这个例子有帮助,这是JSON中发布的字符串。我在数据库中有一些规则,这将有助于为工作挑选正确的文章。

    $postdata = '{"next":false, 
                  "data":{"name":"patrick",
                          "etc":"etc",
                         "MotionDetection":"yes",
                         "nameOfTheRoom": ["Room1","Room2","Room3"],  
                         "havePets":"yes"}';

 Array
 (
     [0] => 0-5
     [1] => 0-8
     [2] => 0-9
     [3] => Array
         (
             [0] => "yes" // MotionDetection
             [1] => Array
                 (
                     [0] => "yes" // Have Pets
                     [1] => Array
                         (
                             [0] => "CountRecords" // Count nameOfTheRoom
                             [1] => "insertArticle A"
                         )

                     [2] => "No" // Have Pets
                     [3] => Array
                         (
                             [0] => "CountRecords" // Count nameOfTheRoom
                             [1] => "insertArticle B"
                         )

                 )

         )

 )

1 个答案:

答案 0 :(得分:0)

试试这个:

function transform_arr(&$newarr, &$arr)
{
  if(count($newarr) == 0)
  {
    if(!isset($arr[0]))
    {
       return;
    }

    $newarr = $arr[0];
  }

  $newarr2 = array();
  $k = 0;
  foreach( $newarr as $i => $value )
  {
     if( isset($arr[$i]) )
     {
       $newarr2[$k++] = $value;
       $newarr2[$k++] = $arr[$i];

       if(is_array($newarr2[$k - 1])) transform_arr($newarr2[$k - 1], $arr);
     }
     else
     {
       $newarr2[$k++] = $value;
     }
  }
  $newarr = $newarr2;
}

$arr = array( 
  0 => array( 5=> '0-5', 8 => '0-8', 9 => '0-9', 10 => '0-10'),
  10 => array( 11 => '10-11', 12 => '10-12'),
  11 => array( 13 => '11-13'),
  12 => array( 14 => '12-14') );

$newarr = array();
transform_arr($newarr, $arr);

var_dump($arr);
echo '<br/>';
var_dump($newarr);

结果:

  [0]=>
  array(4) {
    [5]=>
    string(3) "0-5"
    [8]=>
    string(3) "0-8"
    [9]=>
    string(3) "0-9"
    [10]=>
    string(4) "0-10"
  }
  [10]=>
  array(2) {
    [11]=>
    string(5) "10-11"
    [12]=>
    string(5) "10-12"
  }
  [11]=>
  array(1) {
    [13]=>
    string(5) "11-13"
  }
  [12]=>
  array(1) {
    [14]=>
    string(5) "12-14"
  }
}

array(5) {
  [0]=>
  string(3) "0-5"
  [1]=>
  string(3) "0-8"
  [2]=>
  string(3) "0-9"
  [3]=>
  string(4) "0-10"
  [4]=>
  array(4) {
    [0]=>
    string(5) "10-11"
    [1]=>
    array(1) {
      [0]=>
      string(5) "11-13"
    }
    [2]=>
    string(5) "10-12"
    [3]=>
    array(1) {
      [0]=>
      string(5) "12-14"
    }
  }
}