如何从非本机函数调用返回数组?

问题描述 投票:0回答: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);
}
php return function-call
1个回答
6
投票
PHP 中的

Array

 不是 JSON。这是一个数组。简直就是
return $ret;


如果您需要一个数组,而不是一个字符串,则应该返回该数组(如

json_encode

 给出的那样)。

此外,您使用的是

echo

,而不是 
return
echo
 打印到 
stdout
 或 HTML 正文,具体取决于 PHP 环境(尽管它们是一回事,只是使用重定向和不同的环境来处理它)。

return

 将导致函数按预期将其返回值传递给调用者(通常传递到变量或另一个函数中);如果没有返回值,该函数将始终返回 
NULL

© www.soinside.com 2019 - 2024. All rights reserved.