2012-06-03 139 views
-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:這些實例的值也列恩與此我要處理一些動作。例如0-9是一個動作,停止,但0-10有孩子。如果0-10完成並返回true或false,則下一個孩子被觸發。如果是真10-11否則10-12。這是我第一次在這個論壇上爲任何不便帶來的不便

編輯2:也許這個例子有幫助,這是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" 
         ) 

       ) 

     ) 

) 
+2

歡迎堆棧溢出! [你有什麼嘗試?](http://whathaveyoutried.com) –

+2

而你的問題實際上是什麼? – lanzz

+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]=> 
    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" 
    } 
    } 
} 
+0

這幾乎是我需要的。你的代碼比我的例子產生了不同的結果。 Tnx很多麻煩! –

+0

如果您完全解釋您的數組生成邏輯,我將嘗試修復解決方案。 – Ruben

+0

它就像一連串的反應,也許整個想法是錯誤的?在僞代碼if motiondetection == true然後計算房間的數量並詢問你是否有寵物,如果是,則添加acticle A *房間,否則添加B *房間。 –