使用语言变量将转置数组恢复为原始状态

时间:2012-03-11 14:54:06

标签: 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] => 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;
}

语言数组以fr,en(基于lang表中所需的lang顺序)的顺序排列,但是pages数组按顺序en,fr。函数将其还原为当前状态,但将全部写入英语值。我在这里犯了一个错误但是失明了所以看不到它。谢谢你的帮助。

如果该功能以错误的方式被虚构,则总是欢迎新的建议。

我编辑了然后功能到最后workinh副本。结果是:

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
)

1 个答案:

答案 0 :(得分:0)

希望这会有所帮助:

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的元素。