Php 使用语言变量将转置数组还原为原始状态
我有如下页面的查询结果:Php 使用语言变量将转置数组还原为原始状态,php,mysql,arrays,content-management-system,multilingual,Php,Mysql,Arrays,Content Management System,Multilingual,我有如下页面的查询结果: Array ( [0] => Array ( [lang] => en [id_page] => 113 [url] => pageurl_in_english [title] => Page Name in English ) [1] => Array ( [lang] => fr [id_page
Array
(
[0] => Array
(
[lang] => en
[id_page] => 113
[url] => pageurl_in_english
[title] => Page Name in English
)
[1] => Array
(
[lang] => fr
[id_page] => 113
[url] => pageurl_in_french
[title] => Page Name in French
)
)
我编写了一个函数,在提交表单时将该数组恢复到原始状态
原始状态为:
Array
(
[0] => Array
(
[url] => Array
(
[fr] => pageurl_in_french
[en] => pageurl_in_english
)
[title] => Array
(
[fr] => Page Name in French
[en] => Page Name in English
)
)
)
应该将其还原回的函数
function ml_back_to_form($data,$fields,$languages)
{
$result = array();
foreach ($fields as $field)
{
$i = 0;
foreach ($languages as $lang)
{
$result[$i][$field][$lang] = $data[$i][$field];
}
$i++;
}
return $result;
}
languages数组按fr,en的顺序排列(基于lang表中所需的lang顺序),但pages数组按en,fr的顺序排列。函数将其恢复到当前状态,但将所有值写入英语值。我在这里犯了个错误,但我是瞎子,所以看不见。谢谢你的帮助
如果功能是以错误的方式虚构的,新的建议总是受欢迎的
我编辑了函数,然后复制到最后一个。结果是:
Array
(
[0] => Array
(
[lang] => Array
(
[fr] => en
[en] => en
)
[url] => Array
(
[fr] => pageurl_in_english
[en] => pageurl_in_english
)
[title] => Array
(
[fr] => Page name in English
[en] => Page name in English
)
)
)
函数中提供的数组:
$data
是这个问题中的第一个数组,由db生成
$fields
:
$fields = array(
'lang',
'url',
'title'
);
$languages
:
Array
(
[0] => fr
[1] => en
)
希望这将有助于:
function ml_back_to_form($data,$fields,$languages)
{
$result = array();
foreach ($data as $item)
{
$i=0;
foreach ($fields as $field)
{
//Store the data from the field in an array
if (in_array($item['lang'], $languages))
$result[$i][$field][$item['lang']] = $item[$field];
}
$i++;
}
return $result;
}
注意:此函数要求
$fields
的元素出现在$data
数组中。只是一个小点,但第二个循环中的if语句使用赋值运算符(=)而不是比较运算符(例如==)。但是,我不确定这是否是问题的原因。我尝试将其替换为=
,并使用空数组给出未定义的索引错误。我认为这不是问题所在。如果删除语句以保持思想开放。以上是lst工作副本,但结果错误。还添加了结果。您能否发布一个传递给函数($data、$fields和$languages)的数组结构示例?@Dan Murfitt,我已经在问题中添加了传递数组。希望你能帮忙。工作很好。谢谢你的贡献。我们是否可以使用任何替代方案来代替_array中的
?很高兴它起了作用。可能-你是想重构算法,还是只需要特别避免在数组()中使用
?我不是专业人士,因为我会说,只是试图避免在数组()中使用
。原因完全是我自己的经验,数组搜索在处理大量记录时可能会带来麻烦。这就是为什么我更喜欢isset
like函数的原因。这不是事实,只是我的低级意见。