1

これを行う簡単な方法はありますか?

$array = array(1,57,5,84,21,8,4,2,8,3,4);
$remove = 21;   
$i = 0;
foreach ($array as $value ){
    if( $value == $remove)
        unset($array[$i])
        $i++;
    }

//array: 1,57,5,84,8,4,2,8,3,4
4

3 に答える 3

9

array_search答えは良いです。あなたもarraydiffこれが好きかもしれません

$array = array(1,57,5,84,21,8,4,2,8,3,4);
$remove = array(21);
$result = array_diff($array, $remove); 
于 2012-08-29T19:42:24.897 に答える
5

配列内で最初に出現するアイテムを削除する場合はarray_search、独自のループをロールするのではなく、を使用して配列内のアイテムのインデックスを検索します。

$array = array(1,57,5,84,21,8,4,2,8,3,4);
$remove = 21;

$index = array_search($remove, $array);

if (index !== false)
  unset($array[$index]);

すべての重複を削除するには、一致するものが見つかるまで検索/削除を再実行します。

while (false !== ($index = array_search($remove, $array))) {
  unset($array[$index]);
}

または、値が一致するすべてのキーを見つけて削除します。

foreach (array_keys($array, $remove) as $key) {
  unset($array[$key]);
}
于 2012-08-29T19:39:23.637 に答える
0

これは少しきれいです:

foreach($array as $key => $value) {
    if ($value == $remove) {
        unset($array[$key]);
        break;
    }
}

アップデート

または、一致しない値を一時配列に配置してから、元の値をリセットすることもできます。

$temp = array();

foreach($array as $key => $value) {
    if ($value != $remove) {
        $temp[$key] = $value;
    }
}
$array = $temp;
于 2012-08-29T19:39:04.660 に答える