QA@IT
«質問へ戻る

syntax hilightの修正

5599
本文
 アドバイスいただければ助かります。
 
 /******** ここからコード *********/
+
+
+```php
 <?php
 $cntno = 0;
 $sql_aray = [   {"text":"1","level":"1"},
    return $mstrAry;
 }
 ?>
+```

一覧からの階層情報付JSONの作成 (PHP)

PHP + jQuery Eeasyui(http://www.jeasyui.com/ )を使用してファイル、ディレクトリ(フォルダ)の関係をツリー表示するWebツールを作成しています。
ディレクトリ(フォルダ)の関係はデータベースのテーブルに登録している
・ファイル、ディレクトリ名
・階層レベル(階層の深さ)
・ほか付随する情報
から配列($sql_aray)を生成し、childArray関数を経て連想配列($json_Array)を作成、JSONに変換してjQuery EeasyuiのTreeに表示するように考えています。

実際のファイル、ディレクトリ構造からデータベースへ登録する情報は「ファイル、ディレクトリ一覧を作成する」というような再帰関数を使用した方法で解決しましたが、その逆で詰まっています。

ざっくりとしたコードですが、いま考えているものです。
{"text":"8","level":"5"} と {"text":"9","level":"2"} の階層レベルが2つ以上離れているときにどう処理すればいいのか?
そもそもこういった課題の解法として定番のアルゴリズムがあるのか?

アドバイスいただければ助かります。

/******** ここからコード *********/

<?php
$cntno = 0;
$sql_aray = [   {"text":"1","level":"1"},
      {"text":"2","level":"2"},
      {"text":"3","level":"2"},
      {"text":"4","level":"3"},
      {"text":"5","level":"4"},
      {"text":"6","level":"5"},
      {"text":"7","level":"4"},
      {"text":"8","level":"5"},
      {"text":"9","level":"2"},
      {"text":"10","level":"3"}];   //実際はDBから取得する
$json_Array = array();
$json_Array = childArray($sql_aray);

echo json_encode($json_Array);

/*
表示する結果:[{"text":"1","level":"1","children":[{"text":"2","mLevel":"2"},{"text":"3","mLevel":"2","children":[{"text":"4","mLevel":"3","children":[{"text":"5","mLevel":"4","children":[{"text":"6","mLevel":"5"}]},{"text":"7","mLevel":"4","children":[{"text":"8","mLevel":"5"}]},{"text":"9","mLevel":"2","children":[{"text":"10","mLevel":"3"}]}]}]}]}]
希望する結果:[{'text':'1','level':'1','children':[{'text':'2','mLevel':'2'},{'text':'3','mLevel':'2','children':[{'text':'4','mLevel':'3','children':[{'text':'5','mLevel':'4','children':[{'text':'6','mLevel':'5'}]},{'text':'7','mLevel':'4','children':[{'text':'8','mLevel':'5'}]}]}]},{'text':'9','mLevel':'2','children':[{'text':'10','mLevel':'3'}]}]}]
*/


function childArray($sql_aray){
   global $cntno;

   $mstrAry = Array();

   if($cntno > count($sql_aray)){
      return $mstrAry;
   }

   for ($k = $cntno ; $k < count($sql_aray)  ; $k++){

      if($cntno > count($sql_aray) - 1){break;}

      $rows = $sql_aray[$cntno];
      $level = $rows['level'];
      $text = $rows['text'];

      if($cntno == count($sql_aray) - 1){
         $nextLevel = 0;
      }else{
         $nextLevel = $sql_aray[$cntno + 1]['level'];
      }

      $cntno++;
      if($nextLevel > $level){
         $childAray = array("text" => $text, "level" => $level, "children" => childArray($sql_aray));

         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }



      }elseif ($nextLevel == $level){
         $childAray = array("text" => $text, "level" => $level);

         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }


      }elseif ($nextLevel < $level){

         $childAray = array("text" => $text, "level" => $level);

         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }
         break;
      }
   }
   return $mstrAry;
}
?>
PHP + jQuery Eeasyui(http://www.jeasyui.com/ )を使用してファイル、ディレクトリ(フォルダ)の関係をツリー表示するWebツールを作成しています。
ディレクトリ(フォルダ)の関係はデータベースのテーブルに登録している
・ファイル、ディレクトリ名
・階層レベル(階層の深さ)
・ほか付随する情報
から配列($sql_aray)を生成し、childArray関数を経て連想配列($json_Array)を作成、JSONに変換してjQuery EeasyuiのTreeに表示するように考えています。

実際のファイル、ディレクトリ構造からデータベースへ登録する情報は「ファイル、ディレクトリ一覧を作成する」というような再帰関数を使用した方法で解決しましたが、その逆で詰まっています。

ざっくりとしたコードですが、いま考えているものです。
{"text":"8","level":"5"} と {"text":"9","level":"2"} の階層レベルが2つ以上離れているときにどう処理すればいいのか?
そもそもこういった課題の解法として定番のアルゴリズムがあるのか?

アドバイスいただければ助かります。

/******** ここからコード *********/


```php
<?php
$cntno = 0;
$sql_aray = [   {"text":"1","level":"1"},
      {"text":"2","level":"2"},
      {"text":"3","level":"2"},
      {"text":"4","level":"3"},
      {"text":"5","level":"4"},
      {"text":"6","level":"5"},
      {"text":"7","level":"4"},
      {"text":"8","level":"5"},
      {"text":"9","level":"2"},
      {"text":"10","level":"3"}];   //実際はDBから取得する
$json_Array = array();
$json_Array = childArray($sql_aray);

echo json_encode($json_Array);

/*
表示する結果:[{"text":"1","level":"1","children":[{"text":"2","mLevel":"2"},{"text":"3","mLevel":"2","children":[{"text":"4","mLevel":"3","children":[{"text":"5","mLevel":"4","children":[{"text":"6","mLevel":"5"}]},{"text":"7","mLevel":"4","children":[{"text":"8","mLevel":"5"}]},{"text":"9","mLevel":"2","children":[{"text":"10","mLevel":"3"}]}]}]}]}]
希望する結果:[{'text':'1','level':'1','children':[{'text':'2','mLevel':'2'},{'text':'3','mLevel':'2','children':[{'text':'4','mLevel':'3','children':[{'text':'5','mLevel':'4','children':[{'text':'6','mLevel':'5'}]},{'text':'7','mLevel':'4','children':[{'text':'8','mLevel':'5'}]}]}]},{'text':'9','mLevel':'2','children':[{'text':'10','mLevel':'3'}]}]}]
*/


function childArray($sql_aray){
   global $cntno;
   
   $mstrAry = Array();
   
   if($cntno > count($sql_aray)){
      return $mstrAry;
   }
   
   for ($k = $cntno ; $k < count($sql_aray)  ; $k++){
      
      if($cntno > count($sql_aray) - 1){break;}
      
      $rows = $sql_aray[$cntno];
      $level = $rows['level'];
      $text = $rows['text'];
      
      if($cntno == count($sql_aray) - 1){
         $nextLevel = 0;
      }else{
         $nextLevel = $sql_aray[$cntno + 1]['level'];
      }
      
      $cntno++;
      if($nextLevel > $level){
         $childAray = array("text" => $text, "level" => $level, "children" => childArray($sql_aray));
         
         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }


         
      }elseif ($nextLevel == $level){
         $childAray = array("text" => $text, "level" => $level);
         
         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }
         
         
      }elseif ($nextLevel < $level){
         
         $childAray = array("text" => $text, "level" => $level);
         
         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }
         break;
      }
   }
   return $mstrAry;
}
?>
```

質問を投稿

一覧からの階層情報付JSONの作成 (PHP)

PHP + jQuery Eeasyui(http://www.jeasyui.com/ )を使用してファイル、ディレクトリ(フォルダ)の関係をツリー表示するWebツールを作成しています。
ディレクトリ(フォルダ)の関係はデータベースのテーブルに登録している
・ファイル、ディレクトリ名
・階層レベル(階層の深さ)
・ほか付随する情報
から配列($sql_aray)を生成し、childArray関数を経て連想配列($json_Array)を作成、JSONに変換してjQuery EeasyuiのTreeに表示するように考えています。

実際のファイル、ディレクトリ構造からデータベースへ登録する情報は「ファイル、ディレクトリ一覧を作成する」というような再帰関数を使用した方法で解決しましたが、その逆で詰まっています。

ざっくりとしたコードですが、いま考えているものです。
{"text":"8","level":"5"} と {"text":"9","level":"2"} の階層レベルが2つ以上離れているときにどう処理すればいいのか?
そもそもこういった課題の解法として定番のアルゴリズムがあるのか?

アドバイスいただければ助かります。

/******** ここからコード *********/
<?php
$cntno = 0;
$sql_aray = [ {"text":"1","level":"1"},
{"text":"2","level":"2"},
{"text":"3","level":"2"},
{"text":"4","level":"3"},
{"text":"5","level":"4"},
{"text":"6","level":"5"},
{"text":"7","level":"4"},
{"text":"8","level":"5"},
{"text":"9","level":"2"},
{"text":"10","level":"3"}]; //実際はDBから取得する
$json_Array = array();
$json_Array = childArray($sql_aray);

echo json_encode($json_Array);

/*
表示する結果:[{"text":"1","level":"1","children":[{"text":"2","mLevel":"2"},{"text":"3","mLevel":"2","children":[{"text":"4","mLevel":"3","children":[{"text":"5","mLevel":"4","children":[{"text":"6","mLevel":"5"}]},{"text":"7","mLevel":"4","children":[{"text":"8","mLevel":"5"}]},{"text":"9","mLevel":"2","children":[{"text":"10","mLevel":"3"}]}]}]}]}]
希望する結果:[{'text':'1','level':'1','children':[{'text':'2','mLevel':'2'},{'text':'3','mLevel':'2','children':[{'text':'4','mLevel':'3','children':[{'text':'5','mLevel':'4','children':[{'text':'6','mLevel':'5'}]},{'text':'7','mLevel':'4','children':[{'text':'8','mLevel':'5'}]}]}]},{'text':'9','mLevel':'2','children':[{'text':'10','mLevel':'3'}]}]}]
*/

function childArray($sql_aray){
global $cntno;

$mstrAry = Array();

if($cntno > count($sql_aray)){
return $mstrAry;
}

for ($k = $cntno ; $k < count($sql_aray) ; $k++){

  if($cntno > count($sql_aray) - 1){break;}

  $rows = $sql_aray[$cntno];
  $level = $rows['level'];
  $text = $rows['text'];

  if($cntno == count($sql_aray) - 1){
     $nextLevel = 0;
  }else{
     $nextLevel = $sql_aray[$cntno + 1]['level'];
  }

  $cntno++;
  if($nextLevel > $level){
     $childAray = array("text" => $text, "level" => $level, "children" => childArray($sql_aray));

     if($mstrAry == []){
        $mstrAry = array($childAray);
     }else{
        $mstrAry = array_merge($mstrAry, array($childAray));
     }



  }elseif ($nextLevel == $level){
     $childAray = array("text" => $text, "level" => $level);

     if($mstrAry == []){
        $mstrAry = array($childAray);
     }else{
        $mstrAry = array_merge($mstrAry, array($childAray));
     }


  }elseif ($nextLevel < $level){

     $childAray = array("text" => $text, "level" => $level);

     if($mstrAry == []){
        $mstrAry = array($childAray);
     }else{
        $mstrAry = array_merge($mstrAry, array($childAray));
     }
     break;
  }

}
return $mstrAry;
}
?>

PHP + jQuery Eeasyui(http://www.jeasyui.com/ )を使用してファイル、ディレクトリ(フォルダ)の関係をツリー表示するWebツールを作成しています。
ディレクトリ(フォルダ)の関係はデータベースのテーブルに登録している
・ファイル、ディレクトリ名
・階層レベル(階層の深さ)
・ほか付随する情報
から配列($sql_aray)を生成し、childArray関数を経て連想配列($json_Array)を作成、JSONに変換してjQuery EeasyuiのTreeに表示するように考えています。

実際のファイル、ディレクトリ構造からデータベースへ登録する情報は「ファイル、ディレクトリ一覧を作成する」というような再帰関数を使用した方法で解決しましたが、その逆で詰まっています。

ざっくりとしたコードですが、いま考えているものです。
{"text":"8","level":"5"} と {"text":"9","level":"2"} の階層レベルが2つ以上離れているときにどう処理すればいいのか?
そもそもこういった課題の解法として定番のアルゴリズムがあるのか?

アドバイスいただければ助かります。

/******** ここからコード *********/
<?php
$cntno = 0;
$sql_aray = [   {"text":"1","level":"1"},
      {"text":"2","level":"2"},
      {"text":"3","level":"2"},
      {"text":"4","level":"3"},
      {"text":"5","level":"4"},
      {"text":"6","level":"5"},
      {"text":"7","level":"4"},
      {"text":"8","level":"5"},
      {"text":"9","level":"2"},
      {"text":"10","level":"3"}];   //実際はDBから取得する
$json_Array = array();
$json_Array = childArray($sql_aray);

echo json_encode($json_Array);

/*
表示する結果:[{"text":"1","level":"1","children":[{"text":"2","mLevel":"2"},{"text":"3","mLevel":"2","children":[{"text":"4","mLevel":"3","children":[{"text":"5","mLevel":"4","children":[{"text":"6","mLevel":"5"}]},{"text":"7","mLevel":"4","children":[{"text":"8","mLevel":"5"}]},{"text":"9","mLevel":"2","children":[{"text":"10","mLevel":"3"}]}]}]}]}]
希望する結果:[{'text':'1','level':'1','children':[{'text':'2','mLevel':'2'},{'text':'3','mLevel':'2','children':[{'text':'4','mLevel':'3','children':[{'text':'5','mLevel':'4','children':[{'text':'6','mLevel':'5'}]},{'text':'7','mLevel':'4','children':[{'text':'8','mLevel':'5'}]}]}]},{'text':'9','mLevel':'2','children':[{'text':'10','mLevel':'3'}]}]}]
*/


function childArray($sql_aray){
   global $cntno;
   
   $mstrAry = Array();
   
   if($cntno > count($sql_aray)){
      return $mstrAry;
   }
   
   for ($k = $cntno ; $k < count($sql_aray)  ; $k++){
      
      if($cntno > count($sql_aray) - 1){break;}
      
      $rows = $sql_aray[$cntno];
      $level = $rows['level'];
      $text = $rows['text'];
      
      if($cntno == count($sql_aray) - 1){
         $nextLevel = 0;
      }else{
         $nextLevel = $sql_aray[$cntno + 1]['level'];
      }
      
      $cntno++;
      if($nextLevel > $level){
         $childAray = array("text" => $text, "level" => $level, "children" => childArray($sql_aray));
         
         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }


         
      }elseif ($nextLevel == $level){
         $childAray = array("text" => $text, "level" => $level);
         
         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }
         
         
      }elseif ($nextLevel < $level){
         
         $childAray = array("text" => $text, "level" => $level);
         
         if($mstrAry == []){
            $mstrAry = array($childAray);
         }else{
            $mstrAry = array_merge($mstrAry, array($childAray));
         }
         break;
      }
   }
   return $mstrAry;
}
?>