2011-10-18 25 views
0

私は2つの文字列の配列を持っています。最初の配列には古いデータが含まれ、2番目の配列は新しいデータであり、古い配列のデータを上書きする必要があります。これは、2つの配列のインデックスを一致させ、異なるセルを上書きすることで簡単に達成できます。複雑な方法で2つの配列を一致させる

ただし、新しいデータの配列のインデックスの長さが古いものと異なる場合に問題が発生します。たとえば、ある新しい文字列が新しい配列の途中に挿入された場合、そのインデックスが古いインデックスのインデックスを上書きすることは望ましくありません。ここで

は私の出力が

finalarray("foobar", "blah", "watcha", "zilch") 

あるべき順序が重要である、しかし「もちろんゼロ」は維持する必要がある

myoldarray("foobar", "blah", "zilch") 
mynewarray("foobar", "blah", "watcha", "zilch") 

...私が達成しようとしているものを説明するための一例です前と同じキー。

+0

ここにいません。あなたはこれの生産が好きですか?古い配列+ 'watcha'? – blockhead

+1

あなたの例はどのような結果になるでしょうか? –

+0

また、 'myoldarray(" foobar "、" blah "、" zilch ")'と 'mynewarray(" foobar "、" blah "、" watcha ")'があるとどうなりますか? – Jon

答えて

0

あなたは、必ずしもあなたが違いを取得するためにarray_compareを使用して、同じ位置にそれを追加することができ数値配列のインデックスを、維持する必要がある場合配列のこのインデックスが既に存在する場合は、古い値&インデックス1のキーを上に移動するだけです。あなたがしたいことが叶うことを願っています。

$difference = array_diff($newarr,$oldarr); 
foreach($difference as $diff) 
{ 
    foreach($newarr as $key => $value) 
    { 
     if($value == $diff) 
     { 
       if(array_key_exists($key,$oldarr)) 
       { 
        $oldkey = count($oldarr)-1; 
        for($i=count($oldarr);$i>$key;$i--) 
        { 
         $oldarr[$oldkey+1] = $oldarr[$oldkey]; 
        } 
        $oldarr[$key] = $value; 
       } 
       else 
       { 
        $oldarr[$key] = $value; 
       } 

     } 
    } 
} 

幸運!

+0

array_diffは配列を返しませんか?ですから、あなたが$ diffと$ valueを比較しようとすると、うまくいかないでしょうか? array_key_existsには2つのパラメータが必要ですか? –

+0

はい、あなたは正しいです、ちょうど私の頭のそれをまっすぐ書いた。あなたのサンプル配列でそれをテストし、それを動作させました:)楽しくてください! – Anonymous

+0

これは正常に古い配列の正しいインデックスに "watcha"を入れましたが、私は "zilch"が以前と同じ参照可能なキーを持つようにする必要があります。それで私は自分自身でこれをやり遂げようと困惑してしまった - 順序付けられたキーを動作させることができなかったので、一意的に生成されたキーを使用しようとしたが、後で最初から各インデックスを再作成できるようにする必要がある。以前と同じ鍵を持っているうまくいけばそれは意味をなさない:P –

関連する問題