2009-08-17 18 views
17

特定の配列要素を配列から削除するPHP関数はありますか?PHPの配列から値を削除するには?

たとえば、値を持つ配列(A)と値を削除する必要がある別の配列(B)があります。

アレイAの値をアレイBから削除したいですか?

+0

私は助けることはできませんが、私は同じことを疑問に思っています – JasonDavis

答えて

31

使用array_diff()

$new_array = array_diff($arrayB, $arrayA); 

$arrayAではありません$arrayBからすべての要素を持つ配列を返します。

連想配列でこれを行うには、array_diff_assoc()を使用します。

単一の値の使用を削除するには:

unset($array[$key]); 

あなたは配列関数と同等のものを行うには、コースループのことができますが、それにはポイントがありません。

1
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

print_r($result); 
5

「削除」という言葉の意味によって異なります。

unset()関数を使用して配列からキーを削除することはできますが、再インデックスは行いません。あなたが持っているのであれば、たとえば、:

$a = array(1 => 'one', 2 => 'two', 3 => 'three'); 

を、あなたは、あなたが配列の順番にインデックスを作成する必要がある場合は、

(1 => 'one', 3 => 'three'); 

のようなものになってしまいます

unset($a[2]); 

を呼び出します未設定の配列を取得してarray_values()に渡すことができます。この配列は、順次配列されたキーを持つ新しい配列を返します。

元のシナリオに戻って、他の人が見ているように、array_diffはあなたの仕事をしますが、インデックスチェックはしません。必要な場合は、代わりにarray_diff_assocを使用してください。

1

この記事では、アレイから1つの値を削除する方法を探していました(タイトルに記載されています)。ここで削除する値を仮定して単純な方法は、配列にされている。

$list = array('foo', 'bar', 'yay', '\o/'); 
$toremove = 'foo'; 
unset($list[array_search($toremove, $list)]); 

削除する要素が配列の一部でない場合、これはエラーをスローしますけれども。

別の解決策ではなく、実際に最適化されたパフォーマンスが賢明です:

$list = array('foo', 'bar', 'yay', '\o/'); 
$toremove = 'foo'; 
$list = array_flip($list); 
unset($list[$toremove]); 
$list = array_flip($list); 

とにかく、おそらく誰もがここで提案し、より迅速で効率的であるようarray_diff使用して単一の値を持つ配列を作成します。

1

多分、これは簡単で速い解決策です。配列内の複数の値を削除(設定解除)できる単純な反復です。

// Your array 
    $list = array("apple", "orange", "strawberry", "lemon", "banana"); 

    // Initilize what to delete 
    $delete_val = array("orange", "lemon", "banana"); 

    // Search for the array key and unset 
    foreach($delete_val as $key){ 
     $keyToDelete = array_search($key, $list); 
     unset($list[$keyToDelete]); 
    } 
関連する問題