2017-12-13 2 views
2

からの値によって配列内の要素を交換私はメインアレイている他の配列

$example1 = array(
    'city', 
    'name' 
); 

$example2 = array(
    'city', 
    'street', 
    'name' 
); 

をIは、(単一のアレイによって)受け取りたい:

$example1 = array(
    'London', 
    'John' 
); 

$example2 = array(
    'London', 
    'Hyde Park', 
    'John' 
); 

はよりも、このための良い方法です3210

たぶん私はarray_mapを使用したり、あるarray_walkが、どのようにできますか?

+0

あなたはあなたのコードが動作しますか?それは配列に文字列を割り当てるように見え、とにかくすべての繰り返しで上書きされます。また、ここではin_arrayを使用することは非効率的です。しかし、そうでなければ、配列をループするという前提は間違っていません。一行でよりエレガントに行うことは、効率を上げることにはなりません。 – Ynhockey

答えて

0

あなたが示唆したように、array_mapは、このために良いです。

$example1Mapped = array_map(function($key) use ($main) { 
    return array_key_exists($key, $main) ? $main[$key] : $key; 
}, $example1); 

$example2Mapped = array_map(function($key) use ($main) { 
    return array_key_exists($key, $main) ? $main[$key] : $key; 
}, $example2); 

別のアプローチは、array_flipを組み合わせて使用​​することができ、array_intersect_key

$example1Mapped = array_intersect_key($main, array_flip($example1)); 

array_flipはキーと値へのそのキーへの配列の値が変わります。だから、$example1 = ['city', 'name'];$example1 = ['city' => 0, 'name' => 1];

array_intersect_keyに変換されます、その後キーが反転し$example1に提示されていない、$mainからすべての値を削除します。

しかし、この解決策は、値の順序を保持しませんが、代わりに$main配列の順序を強制します。

$mainアレイのキーとして存在しない値がサンプル配列にある場合、値はarray_mapの方法で保持されますが、2番目の方法では削除されます。

関連する問題