Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用语言变量将转置数组还原为原始状态_Php_Mysql_Arrays_Content Management System_Multilingual - Fatal编程技术网

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函数的原因。这不是事实,只是我的低级意见。