使用PHP将数组正确处理为多个文件

使用PHP将数组正确处理为多个文件,php,include,Php,Include,好吧,我有一个问题,我正在寻找建模的最佳方法 目前,我有一个名为$lang的数组,它在多个文件中定义。在每个文件中都是这样初始化的:$lang=array\u merge($lang,array(“Key”=>“Value”)这样,当页面上包含多个文件时,$lang数组将其各自文件中的所有键和值包含在一个大数组中 现在我想构建一个前端,它显示数组中的所有属性,用户可以更改属性并保存它们。目前,我将其包括在内: foreach(glob("language/*.php") as $filename

好吧,我有一个问题,我正在寻找建模的最佳方法

目前,我有一个名为
$lang
的数组,它在多个文件中定义。在每个文件中都是这样初始化的:
$lang=array\u merge($lang,array(“Key”=>“Value”)
这样,当页面上包含多个文件时,
$lang
数组将其各自文件中的所有键和值包含在一个大数组中

现在我想构建一个前端,它显示数组中的所有属性,用户可以更改属性并保存它们。目前,我将其包括在内:

foreach(glob("language/*.php") as $filename){
   include $filename;
}
我可以很好地显示它们,但是当我想将它们作为表单重新提交时,我不知道如何指定哪个
Key=>Value
属于哪个文件,因为它们在被包含时都被合并了


是否有一些聪明的方法可以区分某个
键=>值属于哪个文件,因为我现在已经设置了它,或者我应该后退一步,以不同的方式设置模型?

听起来您需要使用多维数组在每个数组中存储文件名,例如

array("filename"=>array("Key" => "Value")

听起来您需要使用多维数组在每个数组中存储文件名,例如

array("filename"=>array("Key" => "Value")

您的输入字段可能看起来像这样,其中包含文件名:

<input type="text" name="data[file1][key1]" value="new value" />
<input type="text" name="data[file2][key1]" value="new value" />


这样,您就可以区分它们,并将文件写回不同的文件中。

您的输入字段可能看起来像这样,其中包含文件名:

<input type="text" name="data[file1][key1]" value="new value" />
<input type="text" name="data[file2][key1]" value="new value" />


这样,您就可以区分它们并将文件写回不同的文件中。

我可以想到的两种方法是按文件排序:

array(
    'filename' => array(
        'key' => 'value',
    )
)
或按键排序:

array(
    'key' => array(
        'value',
        'filename'
    )
)

这真的取决于你以后想如何处理它。我认为这里没有“正确”的答案。

我可以想到的两种方法是按文件排序:

array(
    'filename' => array(
        'key' => 'value',
    )
)
或按键排序:

array(
    'key' => array(
        'value',
        'filename'
    )
)

这真的取决于你以后想如何处理它。我认为这里没有一个“正确”的答案。

我看到您的代码的主要问题是您对
$lang
变量加上数据文件中的一些函数魔法进行了编码。考虑下面的内容,而不是在数据和逻辑之间有更多差异:

language/sample.php:

return array("key" => "value");
正在加载脚本:

foreach(glob("language/*.php") as $filename){
   $filedata = include($filename);
   $lang[$filename] = $filedata;
   # - OR -
   $lang = array_merge($lang, $filedata);
}

您现在可以更模块化地使用语言数据文件,因为它们不再绑定到
$lang
。例如,显示每个文件的编辑器。或者添加所需的元数据。

我看到您的代码存在的主要问题是,您对
$lang
变量加上数据文件中的一些函数魔法进行了编码。考虑下面的内容,而不是在数据和逻辑之间有更多差异:

language/sample.php:

return array("key" => "value");
正在加载脚本:

foreach(glob("language/*.php") as $filename){
   $filedata = include($filename);
   $lang[$filename] = $filedata;
   # - OR -
   $lang = array_merge($lang, $filedata);
}

您现在可以更模块化地使用语言数据文件,因为它们不再绑定到
$lang
。例如,显示每个文件的编辑器。或者添加所需的元数据。

也许您可以为文件名映射创建某种语言键:

$map = array();
foreach(glob("language/*.php") as $filename){
   $lang = array();
   include $filename;
   foreach($lang as $k=>$v){
       $map[$k] = $filename;
   }
}
编辑:


但是重构代码并使用其他一些答案和建议可能是一个更好的主意。

也许您可以为文件名映射创建某种语言键:

$map = array();
foreach(glob("language/*.php") as $filename){
   $lang = array();
   include $filename;
   foreach($lang as $k=>$v){
       $map[$k] = $filename;
   }
}
编辑:


但是重构代码并使用其他一些答案建议可能是一个更好的主意。

我最后在我的字段中使用了这个设置,谢谢。我希望我能选择两个被接受的答案!最后,我将此设置用于我的字段,谢谢。我希望我能选择两个被接受的答案!