使用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;
}
}
编辑:
但是重构代码并使用其他一些答案建议可能是一个更好的主意。我最后在我的字段中使用了这个设置,谢谢。我希望我能选择两个被接受的答案!最后,我将此设置用于我的字段,谢谢。我希望我能选择两个被接受的答案!