2

2 つの配列があるとします。

$a=array('1'=>'Apple','2'=>'Microsoft',
         '3'=>'Microapple','4'=>'Applesoft','5'=>'Softapple');
$b=array(1,3);

$b array は、区別される配列 $a のキーを表します。

そして、次の値を持つ別の配列 $c を受け取ることを期待しています。

$c=array('2'=>'Microsoft','4'=>'Applesoft','5'=>'Softapple');

PHPマニュアルには2つの関数があります:

array_diff($array1,$array2);    //difference of values
array_diff_key($array1,$array2);//difference of keys

しかし、ここでは上記のいずれも当てはまりません。

私たちは何をすべきか?

編集

貢献してくれてありがとう。

次のように事前定義された 2 つのアレイでいくつかのベンチマークを実行しました。

for ($i=0; $i < 10000; $i++) {    //add 10000 values
    $a[]=mt_rand(0, 1000000); //just some random number as a value
}
for ($i=0; $i < 10000; $i++) {    //add 10000 values as keys of a
    $b[]=mt_rand(0, 1000);    
}        //randomly from 0 to 1000 (eg does not cover all the range of keys)

各テストも 10000 回行われ、Nanneのソリューションの平均時間は次のとおりです。

0.013398

そして次のいずれかdecereé:

0.014865

これも素晴らしいです。

... in_array() に関する他の提案とは異なりますが、(その回答は削除されました):

foreach ($a as $key => $value)
if (!in_array($key, $b)) 
$c[$key] = $value;

上記は平均2秒でした。in_array() が $b をループして、値が存在するかどうかを確認する必要があるという明らかな理由からです。上記は、その方法の優れた例notです。:-)

4

3 に答える 3

11
$c = array_diff_key($a, array_flip($b));
于 2012-08-13T15:20:48.233 に答える
3

次のようにコーディングします。

$c = $a;
foreach ($b as $removeKey) {
    unset($c[$removeKey]);
}
于 2012-08-13T15:00:24.937 に答える
0

配列$bは配列キーを設定していません。値を設定しています。

使用する場合:

$a=array('1'=>'Apple','2'=>'Microsoft',
     '3'=>'Microapple','4'=>'Applesoft','5'=>'Softapple');
$b=array('1' => NULL ,'3' => NULL);
array_diff_key($a,$b)

あなたはあなたが予測した結果を得るでしょう。

于 2012-08-13T15:04:29.243 に答える