fork download
  1. <?php
  2. class Processor{
  3.  
  4. private $data;
  5. function __construct($category) {
  6. $this->data = array();
  7. $n = 0;
  8. for($i = 0;$i < count($category , COUNT_NORMAL);$i++){
  9. $n = $this->f($category[$i],0,$n+1) - 1;
  10. }
  11. }
  12.  
  13. private function f($arr,$parent,$first){
  14. $name = array_shift($arr);
  15. $current = $first;
  16. //正直型が同じ名前の項目に異なる型の値をツッコむの嫌い。
  17. //自分だったら0をそのまま突っ込むね。
  18.  
  19. //他の言語だと3項演算子って第2項と第3項同じ型じゃないと行けなかった気がするけど、とりあえず動くので良く考えずに放置
  20. array_push($this->data,array('id' => $current , 'parent_id' => ($parent !== 0 ? $parent : "-" ) , 'name' => $name));
  21.  
  22. for($i = 0;$i < count($arr,COUNT_NORMAL);$i++){
  23. $current = $this->f($arr[$i],$first,$current+1) - 1;
  24. }
  25. return $current + 1;
  26.  
  27. }
  28.  
  29. public function getResult(){
  30. return $this->data;
  31. }
  32.  
  33. }
  34.  
  35. function main(){
  36.  
  37. $category = array(
  38. 'ライフ'
  39. ),
  40. 'デジタルライフ',
  41. '携帯・PHS'
  42. ),
  43. 'ワンセグ放送'
  44. )
  45. ),
  46. '趣味',
  47. 'AV機器',
  48. 'オーディオ'
  49. ),
  50. ),
  51. ),
  52. );
  53.  
  54. $processor = new Processor($category);
  55.  
  56. print_r($processor->getResult());
  57.  
  58. }
  59.  
  60. main();
  61.  
  62.  
  63.  
  64.  
  65. ?>
Success #stdin #stdout 0.01s 13112KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => -
            [name] => ライフ
        )

    [1] => Array
        (
            [id] => 2
            [parent_id] => -
            [name] => デジタルライフ
        )

    [2] => Array
        (
            [id] => 3
            [parent_id] => 2
            [name] => 携帯・PHS
        )

    [3] => Array
        (
            [id] => 4
            [parent_id] => 2
            [name] => ワンセグ放送
        )

    [4] => Array
        (
            [id] => 5
            [parent_id] => -
            [name] => 趣味
        )

    [5] => Array
        (
            [id] => 6
            [parent_id] => 5
            [name] => AV機器
        )

    [6] => Array
        (
            [id] => 7
            [parent_id] => 6
            [name] => オーディオ
        )

)