1

次の行でエラーが発生します。

$ret=array_merge($ret,preg_ls($path."/".$e,$rec,$pat));

エラー: array_merge() 引数 #2 は配列ではありません

これを解決する方法を知りません。

ありがとうございました。

function preg_ls($path=".", $rec=false, $pat="/.*/") {
    // it's going to be used repeatedly, ensure we compile it for speed.
    $pat=preg_replace("|(/.*/[^S]*)|s", "\\1S", $pat);
    //echo($pat);
    //Remove trailing slashes from path
    while (substr($path,-1,1)=="/") $path=substr($path,0,-1);
    //also, make sure that $path is a directory and repair any screwups
    if (!is_dir($path)) $path=dirname($path);
    //assert either truth or falsehoold of $rec, allow no scalars to mean truth
    if ($rec!==true) $rec=false;
    //get a directory handle
    $d=dir($path);
    //initialise the output array
    $ret=Array();
    //loop, reading until there's no more to read
    while (false!==($e=$d->read())) {
        //Ignore parent- and self-links
        if (($e==".")||($e=="..")) continue;
        //If we're working recursively and it's a directory, grab and merge
        if ($rec && is_dir($path."/".$e)) {
            $ret=array_merge($ret,preg_ls($path."/".$e,$rec,$pat));
            continue;
        }
        //If it don't match, exclude it
        if (!preg_match($pat,$e)) continue;
        //In all other cases, add it to the output array
        //echo($path."/".$e."<br/>");
        $ret[]=$path."/".$e;
    }
    //finally, return the array
    echo json_encode($ret);
}
4

1 に答える 1

6

ArrayPHPのは JSON ではありません。それは配列です。単にreturn $ret;

文字列ではなく配列を期待している場合は、配列を返す必要があります(json_encode与えられているように)。

また、echoではなくを使用していreturnます。PHP 環境に応じて、または HTML 本体にecho出力します (ただし、リダイレクトとそれを処理するための環境が異なるだけで、それらはまったく同じです)。stdout

return関数は、期待どおりに戻り値を呼び出し元に渡します (通常は変数または別の関数に)。戻り値がない場合、関数は常に を返しNULLます。

于 2013-04-01T21:22:26.753 に答える