如果数组再次调用函数

时间:2019-07-15 13:25:00

标签: php

我在MVC中有一个路由器,它可以正常工作,但是我认为它可以缩短两次,因为if (is_array($path))else之后的任何内容都是相同的

当前,我只是在条件is_array返回true时复制了代码,并使用foreach遍历$path。条件is_array为假时,只需使用else语句即可。

public function run()
    {

        // Get string of query
        $uri = $this->getURI();

        // Check availability of query in routes.php
        foreach ($this->routes as $uriPattern => $path) {

                // Compare $uriPattern and $uri
                if (preg_match("~$uriPattern~", $uri)) {


                        if (is_array($path)) {

                            foreach ($path as $p) {
                  //***logic here***
                            }
                        } else {
                  //***same logic here but for a string***
}

当前我的代码比应该的大,因为其中50%只是其自身的一个副本。您能否建议一种更优雅的方式来拆分数组并通过路径循环?我考虑过递归,但在这种情况下还不知道如何应用。

谢谢

1 个答案:

答案 0 :(得分:0)

    public function run()
    {
        $uri = $this->getURI();

        foreach ($this->routes as $uriPattern => $path) {
            if (preg_match("~$uriPattern~", $uri)) {
                if (!is_array($path)) {
                    $path = [$path];
                }

                foreach ($path as $p) {
                    do_logic($p);
                }
            }
        }
    }