-3

私はすでにこれを理解するのに数時間を費やしましたが、使用可能な結果はありません. 誰かがこれで私を助けてくれるかもしれません。クラス内で使用したいので、配列を入力として、再構築配列を出力としてメソッドを構築したいと思います

私はこの配列を持っています:

     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 は 1 つのアクションで停止しますが、0 ~ 10 には子があります。0-10 が終了し、true または false を返す場合、次の子が起動されます。true の場合は 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"
                         )

                 )

         )

 )
4

1 に答える 1

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]=>
  配列(4) {
    [5]=>
    文字列(3) "0-5"
    [8]=>
    文字列(3) "0-8"
    [9]=>
    文字列(3) "0-9"
    [10]=>
    文字列(4) "0-10"
  }
  [10]=>
  配列(2) {
    [11]=>
    文字列(5) "10-11"
    [12]=>
    文字列(5) "10-12"
  }
  [11]=>
  配列(1) {
    [13]=>
    文字列(5) "11-13"
  }
  [12]=>
  配列(1) {
    [14]=>
    文字列(5) "12-14"
  }
}

配列(5) {
  [0]=>
  文字列(3) "0-5"
  [1]=>
  文字列(3) "0-8"
  [2]=>
  文字列(3) "0-9"
  [3]=>
  文字列(4) "0-10"
  [4]=>
  配列(4) {
    [0]=>
    文字列(5) "10-11"
    [1]=>
    配列(1) {
      [0]=>
      文字列(5) "11-13"
    }
    [2]=>
    文字列(5) "10-12"
    [3]=>
    配列(1) {
      [0]=>
      文字列(5) "12-14"
    }
  }
}
于 2012-06-03T19:47:27.030 に答える