2012-03-11 19 views
0

と元の状態に転置配列を元に戻す:は、私は以下のようにページのクエリ結果を持っている言語変数

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; 
} 

言語アレイは、EN(langのテーブルの所望のlangの順序に基づいて)、FRとのために来たが、ページの配列はFR、ENために来ます。機能は現在の状態に戻しますが、すべて英語の値に書き換えます。私はここで間違いをしていますが、それは見えないので盲目です。助けてくれてありがとう。

機能が誤った形でフィクションされている場合、新しいアドバイスは常に歓迎されます。

編集して、最後に作業コピーを編集しました。結果は次のとおりです。機能で提供

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

ほんの少しの点ですが、2番目のループのif文が、比較演算子(==など)ではなく代入演算子(=)を使用しています。私はこれがあなたの問題の原因であるかどうかは分かりません。 –

+0

'=='で置き換えようとしましたが、空の配列で未定義のインデックスエラーが発生しました。私はそれが問題ではないと思う。 –

+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配列中に存在することを必要とします。

+0

うまく動作します。寄付ありがとうございます。 'in_array'の代わりに使うことのできる代替手段はありますか? –

+0

うれしいことです。おそらく、あなたはアルゴリズムをリファクタリングするか、単に 'in_array()'を避ける必要がありますか? –

+1

よく '私は' in_array() 'を避けようとしているので、私はプロではありません。理由は、配列検索は大量のレコードを扱う際に問題を引き起こす可能性があるという私自身の経験です。だからこそ私はどこでも使えるような 'isset'を好む理由があります。これは事実ではなく、私の低レベルの意見です。 –

関連する問題