【问题标题】:Trying to include an array using a function to require the files with the array尝试使用函数来包含数组以要求包含数组的文件
【发布时间】:2015-09-06 12:00:54
【问题描述】:

我想要求我的 index.php 文件中的文件并使用这些文件中设置的数组。 从中获取文件的树形结构是:

root/lang/nl/dashboard/default.php

root/lang/nl/dashboard/users.php

这些文件的代码是

default.php

// Default DASHBOARD language list


    if (empty($lang) || !is_array($lang)){
        $lang = [];
    }
 $lang = array_merge($lang, [

 'DASH_LANG_DE'             => 'Duits',
 'DASH_LANG_FR'             => 'Frans',
 'DASH_LANG_GB'             => 'Engels',
 'DASH_LANG_NL'             => 'Nederlands',

 'DASH_SET_LANG'            => 'Stel hier uw taal in'


 ]);

users.php

// Default USERS language list


        if (empty($lang) || !is_array($lang)){
            $lang = [];
        }


 $lang = array_merge($lang, [

     'USERS_DEFAULT'            => 'Gebruikers',
     'USERS_CREATE_NEW'         => 'Maak een nieuwe gebruiker aan',
     'USERS_DELETE'             => 'Delete de gebruiker',

     'USERS_NAME'               => 'Naam'


 ]);

index.php 放在根目录下,代码如下

    define ('LANG','lang/');

    function lang_files($language,$path,$file){

      foreach ($file as $value) {
                if(file_exists(''.LANG.$language.'/'. $path .'/'. $value .'.php')){
                    require_once ''.LANG.$language.'/'. $path .'/'. $value .'.php' ;
                }
                else{
                    echo ''.LANG.$language.'/'. $path .'/'. $value .'.php <b>does not exist!!</b>' ;echo "<br>";
                }
        }  
    }

    $language = "nl";

    $path = 'dashboard';

    $file =['default',
                'users'
                ];

    lang_files($language,$path,$file);

    echo $lang['DASH_SET_LANG'];

当我让它工作时,我会将函数作为方法放在我的类文件中,但首先它必须工作。

此时我无法使用

访问数组

回声 $lang['DASH_SET_LANG'];

当我直接需要文件时,我没有问题。

当我在函数中回显出 require_once 部分时,我可以看到我的文件的路径是正确的。

有人知道我哪里出错了吗?

更新

在@vvondra 的帮助下,我能够找出哪里出错了。

您将在下面看到更改后的功能。小改动。

function lang_files($language,$path,$file){
        $lang = [];
          foreach ($file as $value) {
                if(file_exists(''.LANG.$language.'/'. $path .'/'. $value .'.php')){
                    require_once ''.LANG.$language.'/'. $path .'/'. $value .'.php' ;
                }
                else{
                    echo ''.LANG.$language.'/'. $path .'/'. $value .'.php <b>does not exist!!</b>' ;echo "<br>";
                }
            }
        return $lang;
    }

感谢@vvondra 为我指明了正确的方向。

【问题讨论】:

    标签: php arrays function


    【解决方案1】:

    php 中的函数创建作用域。这意味着在函数内部定义的任何变量在其主体之外都是不可见的

    function foo()
    {
        $bar = 1;
    }
    
    // Here $bar is undefined
    foo();
    // Still undefined
    

    在您的情况下,您在 lang_files 函数内初始化 $lang 变量,因此它在外部不可见。您必须将其作为函数的返回值返回,并将其分配给另一个变量。

    【讨论】:

    • 所以如果我理解正确,require_once 只会在函数内部使用,而不是在 index.php 文件中。
    • 你帮助我朝着正确的方向前进。需要一点时间来解决这个问题,但现在我开始工作了。
    【解决方案2】:

    来自 StackOverflow 的这个问题/答案可能会帮助您更轻松、更易于管理。

    How to load return array from a PHP file?

    基本上,你只需要在文件中返回数组,然后在索引中包含你要加载的文件,将包含分配给一个变量。

    它就像一个魅力:)

    【讨论】:

    • 我确实按照您提到的主题尝试过,但它只返回了第一个文件中的数组。它应该在返回之前合并所有文件中的数组。
    • 然后继续收集所有数组并将它们与 array_merge 函数结合。你已经有了基础,现在你需要对它们做点什么。但这就是我的做法,收集包含的结果,将它们与您的结果数组合并。
    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 2017-04-10
    • 1970-01-01
    • 2013-01-07
    • 2011-09-18
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多