Возврат транспонированного массива в исходное состояние с языковыми переменными - PullRequest
0 голосов
/ 11 марта 2012

У меня есть результат запроса для страниц следующим образом:

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
            )
      )
)

Функция, которая должна вернуть его обратно;

* * 1010

Массив языков идет в порядке с fr, en (в зависимости от желаемого порядка lang в таблице lang), но массив страниц имеет порядок 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
)

1 Ответ

0 голосов
/ 11 марта 2012

Надеюсь, это поможет:

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.

...