-1

基本的に、値0が1よりも優先される2つの配列をマージする必要があります。

これを行うためのネイティブのphp関数も、グーグルで私を驚かせた関数も見つかりません(おそらく私は間違ったものを探していました!)、そしてそれを効率的に行う方法を考えることができません。助言がありますか?

例えば:

Array 1                   Array 2
  permission1 => 1            permission1 => 1
  permission2 => 1            permission2 => 1
  permission3 => 0            permission3 => 1
  permission4 => 0            permission4 => 1
                              permission5 => 1

結果の配列は次のようになります。

permission1 => 1
permission2 => 1
permission3 => 0
permission4 => 0
permission5 => 1

ご想像のとおり、これは権限システム用です。Nothingは許可がないことを意味し、0は許可がないことを意味し、1は許可があることを意味します。最善の解決策は、2つを足し合わせて、1または2になるかどうかを確認することだと思いましたが、これを実装する方法を考えることはできません。

この質問が明確であることを願っています。そうでない場合は、説明を求めてください。提案を事前に感謝します。

4

2 に答える 2

3
foreach($array2 as $key => $val) {
   if (!isset($array1[$key])){
        $array1[$key] = $val;
   }
}
于 2012-08-31T21:45:50.747 に答える
0

最初に2つをマージし、次にそれらが交差する場所を取得する場合、最後にゼロを使用して1回だけ取得し、foreachループしてゼロを設定すると、正しい答えが得られるはずです。これにより、ループする配列がかなり小さくなります。

$arr = array_merge( $array1, $array2 );
$intersected = array_intersect_key($array1, $array2);
$intersectWithZeroes = array_keys($intersected, 0);
foreach( $intersectWithZeroes as $key => $value ) {
    $arr[$key] = 0;
}
于 2012-08-31T22:02:28.343 に答える