2016-04-14 7 views
0

私は2つの配列を持っています。アメリカの州の略称とIDとワンなどのように、再び含む別の一つは、略語やその他のデータを述べている:私が終わるしようとしています新しい対応する要素を別の配列の配列に挿入する効率的な方法はありますか?

Array 
(
    [0] => Array 
     (
      [0] => AK 
      [1] => Other State Data 
     ) 

    [1] => Array 
     (
      [0] => FL 
      [1] => Other State Data 
     ) 

    [2] => Array 
     (
      [0] => AK 
      [1] => Other State Data 
     ) 

    [3] => Array 
     (
      [0] => CA 
      [1] => Other State Data 
     ) 

    [4] => Array 
     (
      [0] => CA 
      [1] => Other State Data 
     ) 

    [5] => Array 
     (
      [0] => FL 
      [1] => Other State Data 
     ) 

    [6] => Array 
     (
      [0] => AL 
      [1] => Other State Data 
     ) 

    [7] => Array 
     (
      [0] => IL 
      [1] => Other State Data 
     ) 

    [8] => Array 
     (
      [0] => AL 
      [1] => Other State Data 
     ) 

    [9] => Array 
     (
      [0] => AZ 
      [1] => Other State Data 
     ) 

    [10] => Array 
     (
      [0] => MA 
      [1] => Other State Data 
     ) 
) 


アレイ1:

Array 
    (
     [1] => AL 
     [2] => AK 
     [3] => AZ 
     [4] => CA 
     [5] => FL 
     [6] => MA 
     [7] => IL 
    ) 

アレイ2 2つの配列を比較して、2つ目の配列に挿入すると、最初の配列のキーの位置(略語が一致したとき)になります。最終結果は次のようになります:

Array 
(
    [0] => Array 
     (
      [0] => AK 
      [1] => Other State Data 
      [2] => 2 
     ) 
    [1] => Array 
     (
      [0] => FL 
      [1] => Other State Data 
      [2] => 5 
     ) 
... and so on... 

使用すると思われる便利な機能はありますか?そうでない場合、どのように効率的なパラダイムが見えるでしょうか?配列をループして各メンバーをチェックしますか?

*私は配列値の引用符を使用していないと私の英語のために申し訳ありませんが、それらの音が悪い場合。 ありがとう!

答えて

1

これはまったく試していませんが、理論的にはうまくいくはずです。 2番目の配列をループします。これは変更する配列なので、最初の配列の状態コードを検索します。

foreach ($secondArray as &$values) { 
    list ($state, $otherData) = $values; 
    $stateKey = array_search($state, $firstArray); 
    if (false !== $stateKey) { 
     $values[] = $stateKey; 
    } 
} 
2

まずフリップキー/略語/ IDS配列の値が、その後、修正メインデータ配列array_walkと::

$flipped = array_flip($abbreviationsArray); 
array_walk($data, function(&$item) use($flipped) { 
    if(isset($flipped[ $item[0] ])) $item[] = $flipped[ $item[0] ]; 
}); 

array_walkプロセスごとのデータ配列要素が見つかった場合、それはあなたの二番目の配列への鍵だ追加:各要素に対して - フリップされた配列の中に、現在の要素[0]と同じキーを持つ要素がある場合、それを要素[2]として追加します。最後$data

は次のようになります。あなたの答えやデモの

Array 
(
    [0] => Array 
     (
      [0] => AK 
      [1] => Other State Data 
      [2] => 2 
     ) 
    [1] => Array 
     (
      [0] => FL 
      [1] => Other State Data 
      [2] => 5 
     ) 
    [2] => Array 
     (
      [0] => AK 
      [1] => Other State Data 
      [2] => 2 
    (...) 
) 

eval.in demo

+0

おかげで、興味深いアプローチを。私はロビーの答えと一緒に行くだろうが、少し速くなるので。 – tafvita

関連する問題