2012-01-26 11 views
0

配列は包括的にカバーされていますが、これを回避する方法についてはまだ困惑しています。私は私がこれを行うだろうかPHPで配列を追加する

Array1 + Array2 
(
    [0] => 0 
    [1] => 1 
    [2] => 1 
    [3] => 1 
    [4] => 1 
    [5] => 0 
    [6] => 1 
) 

である私は、すなわち

Array1 
(
    [0] => 0 
    [1] => 1 
    [2] => 1 
    [3] => 1 
    [4] => 1 
    [5] => 0 
    [6] => 0 
) 

+ 

Array2 
(
    [0] => 0 
    [1] => 0 
    [2] => 0 
    [3] => 0 
    [4] => 0 
    [5] => 0 
    [6] => 1 
) 

私の理想的な結果重複キーを上書きせずにマージする二つの配列を持っていますか?私は+を使用しようとしましたが、結果として最初の配列を返します

+1

を感じていないトリム2つの配列キーのそれぞれから高い値を選択したいと言っていますか?または、各キーに2つの配列の合計を数学的に追加したいですか? – rdlowrey

+1

要件が矛盾しています。最初の配列の値を上書きしない限り、値を使用したいのですか、あるいは何か反対のことをしたいのですか?どちらの場合も、表示している結果が正しくありません。あなたの心を作りなさい。 – Tadeck

+0

array1 + array2が解決策です。試したコードの例を教えてください。 – Shoe

答えて

0

array_merge()数字キーを持つ重複要素を上書きしません。

+2

-1これは実際にテストしましたか? – Gumbo

+0

しかし、上書きされないテンキーは、配列の最後に追加されます... – Shoe

0

あなたは2つの配列の(ゼロでない)より大きいを探しているなら、あなたはそのように繰り返すことができます。

$array1 = array(1,0,0,1,1,1); 
$array2 = array(0,0,1,0,0,1); 

$newarr = array(); 
foreach ($array1 as $k => $v) { 
    $newarr[$k] = max($array1[$k], $array2[$k]); 
} 

print_r($newarr); 
Array 
(
    [0] => 1 
    [1] => 0 
    [2] => 1 
    [3] => 1 
    [4] => 1 
    [5] => 1 
) 

何が必要であれば、使用、値を追加することです:

$newarr = array(); 
foreach ($array1 as $k => $v) { 
    $newarr[$k] = $array1[$k] + $array2[$k]; 
} 
0
配列を考えると

は、同じ長さのものである:あなたが何をしたいか

function bitwise_or_arrays($arr1, $arr2) { 
    $result = array(); 
    for ($i = 0; $i < count($arr1); $i++) { 
     $result[$i] = $arr1 | $arr2; 
    } 
    return $result; 
} 
6

は、単一のアレイにcontaiを両方の配列をマッピングすることですそのような2つのそれぞれの値から、寧最大値:それはそのように見えますhttp://ideone.com/clone/MN568

$array1 = array(0, 1, 1, 1, 1, 0, 0); 
$array2 = array(0, 0, 0, 0, 0, 0, 1); 

$result = array_map('max', $array1, $array2); 

は、ここに結果を参照してください

array(7) { 
    [0]=> 
    int(0) 
    [1]=> 
    int(1) 
    [2]=> 
    int(1) 
    [3]=> 
    int(1) 
    [4]=> 
    int(1) 
    [5]=> 
    int(0) 
    [6]=> 
    int(1) 
} 
+0

インテリジェントな 'array_map'の使い方のための+1です。私はこれがOPがやろうとしていることだと思っていますが、あいまいな質問で、誰が知っていますか? – rdlowrey

+0

これは完璧に機能しました。素早い対応の人に感謝します:-) –

+0

@mr_j:私はそれが助けて嬉しいです:) – Tadeck

0

楽しみのためだけに(にもかかわらず、あなたのケースで0に1つの値が動作します:)

$array1 = array(0, 1, 1, 1, 1, 0, 0); 
$array2 = array(0, 0, 0, 0, 0, 0, 1); 

$str1 = implode('', $array1); 
$str2 = implode('', $array2); 

$result = str_split($str1 | $str2); 

申し訳ありませんが、この変形例では、アジ、しかし、それを掲示することができませんでした。配列はビットマスク01111000000001のように見えます。ビットごとに|の演算子を使用するだけです。

その結果:

Array 
(
    [0] => 0 
    [1] => 1 
    [2] => 1 
    [3] => 1 
    [4] => 1 
    [5] => 0 
    [6] => 1 
) 
0

を何あなたが探していることは、彼らが()array_combineを使用組み合わせることである場合。

$beginning = 'foo'; 
$end = array(1 => 'bar'); 
$result = array_merge((array)$beginning, (array)$end); 
print_r($result); 
//output: 
Array(
    [0] => foo 
    [1] => bar 
) 

がHERESに値

$a = array(0=>1, 1=>2, 2=>3, 3=>4); 
$b = array(0=>5, 1=>6, 2=>7, 3=>8); 


$c = $a[0] += $b[0]; 

print_r($c);//output: 6 

イムPHPでない教祖を追加する方法が、私はこれだけでもabitのお役に立てば幸い:

$a = array('green', 'red', 'yellow'); 
$b = array('avocado', 'apple', 'banana'); 
$c = array_combine($a, $b); 

print_r($c); 

//*output: 
array(
[green] => avocado 
[red] => apple 
[yellow] => banana 
) 

はここ配列をマージする方法を説明します。ちょうどそれの楽しみのため

0

$array1 = array(0,1,1,1,1,0,0); 
$array2 = array(0,0,0,0,0,0,1); 

$array3 = str_split(decbin(bindec(implode('',$array1)) | bindec(implode('',$array2)))); 

var_dump($array3); 

残念ながら、それは

$array3 = str_split(str_pad(decbin(bindec(implode('',$array1)) | bindec(implode('',$array2))),count($array1),'0',STR_PAD_LEFT)); 

を使用して先行ゼロ

が先行ゼロを復元しますが、クリーン