min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PHP 再帰関数ことはじめ

正月のうちに取り組みたかったこととして再帰関数によるフォルダの読み込みがある。

要はフォルダの読み込みを再起関数でやりたい。

 

こんなサーバにこんなフォルダ構成があるとして

f:id:min117:20210101162453p:plain

幸せになろう.mp3

PHPで読み込むのに、フォルダ階層の都度foreach()を書きたくはないわけで、再帰でフォルダを読み込む関数例えば my_dir_read() を書いて、

 my_dir_read("01_Utada_Hikaru",1);

とかやったら、01_Utada_Hikaruをゼロ階層として、1階層目の 01_DeepRiver にあるmp3を一覧してほしいわけだ。

 

まずは再帰関数に慣れる必要がある。このへん参照。

qiita.com

 

そのまま実装してテストしてみる。ファイル名は my_recursive01.sh でいいや。

f:id:min117:20210101163254p:plain

 

14行目で関数を開始。引数はテキトーに30を突っ込んでみた。

f:id:min117:20210101163447p:plain

再帰で徐々にカウントダウンして行って

 

最後はargがゼロになって、9行目で表示され、11行目のtrueで正常終了して終わり。

f:id:min117:20210101163509p:plain

 

なんとなく分かった。

 

まずはPHPフォルダを一覧化してリンク化してやって

f:id:min117:20210101164356p:plain

「01_Utada_Hikaru」リンクをクリックしたら、関数 my_dir_read(01_Utada_Hikaru) を呼び出して、その中にあるフォルダをまた一覧してリンク化してやればいいわけだ。

 

 

あとで試す。

 

保存用

<?php

 

function factorial($args) {

    if($args > 0) {

        print $args;

        print '<br>';

        return $args * factorial($args -1);

    }

    print 'arg:' . "$args";

    //return 1; // true

    return true;

}

 

factorial(30);

 

qiita.com

 

f:id:min117:20210101170348p:plain

f:id:min117:20210101170430p:plain

 

www.yukiyukiponsu.work