2867

foreach ($array)その要素が含まれないように、PHPを使用して配列から要素を削除する簡単な方法はありますか?

に設定すればできると思っていnullたのですが、どうやらうまくいきません。

4

26 に答える 26

3317

配列要素を削除するにはさまざまな方法がありますが、特定のタスクには他よりも役立つ方法があります。

単一の配列要素の削除

unset()配列要素を 1 つだけ削除する場合は、代わりに またはを使用できます\array_splice()

値を知っていて、要素を削除するためのキーがわからない場合は、キー\array_search()を取得するために使用できます。\array_searchこれは、最初のヒットのみを返すため、要素が複数回発生しない場合にのみ機能します。

unset()

unset()配列キーを使用しても変更されないことに注意してください。\array_values()キーのインデックスを再作成する場合は、 afterを使用できますunset()。これにより、すべてのキーが 0 から始まる数値的に列挙されたキーに変換されます。

コード:

$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
          // ↑ Key which you want to delete

出力:

[
    [0] => a
    [2] => c
]

\array_splice()方法

を使用する\array_splice()と、キーは自動的に再インデックスされますが、連想キーは変更されません —\array_values()すべてのキーを数値キーに変換する とは対照的です。

\array_splice()2 番目のパラメーターとして、keyではなく、offsetが必要です。

コード:

$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
                   // ↑ Offset which you want to delete

出力:

[
    [0] => a
    [1] => c
]

array_splice()、 と同じようunset()に、参照によって配列を取得します。これらの関数の戻り値を配列に代入しません。

複数の配列要素の削除

unset()複数の配列要素を削除したいが、または複数回呼び出したくない\array_splice()場合は、関数を使用するか、削除する要素の値またはキーを知っているかどうかに応じて\array_diff()使用できます。\array_diff_key()

\array_diff()方法

削除する配列要素の値がわかっている場合は、 を使用できます\array_diff()。以前と同様にunset()、配列のキーは変更されません。

コード:

$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = \array_diff($array, ["a", "c"]);
                          // └────────┘
                          // Array values which you want to delete

出力:

[
    [1] => b
]

\array_diff_key()方法

削除する要素のキーがわかっている場合は、 を使用します\array_diff_key()。キーは、値としてではなく、2 番目のパラメーターのキーとして渡す必要があります。キーは再インデックスされません。

コード:

$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
                               // ↑           ↑
                               // Array keys which you want to delete

出力:

[
    [1] => b
]

同じ値を持つ複数の要素を使用unset()または削除する場合は、特定の値のすべてのキーを取得してからすべての要素を削除するために使用できます。\array_splice()\array_keys()

于 2008-12-15T20:30:46.303 に答える
1393

これはunset()、文字列インデックス (ハッシュテーブルとしての配列) を使用する場合に予想されることですが、整数のインデックス付き配列を扱う場合は非常に驚くべきことです。

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

したがってarray_splice()、整数キーを正規化する場合に使用できます。別のオプションはarray_values()afterを使用していますunset():

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */
于 2008-12-15T21:25:12.747 に答える
404
  // Our initial array
  $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
  print_r($arr);

  // Remove the elements who's values are yellow or red
  $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);

上記のコードの出力は次のとおりです。

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

現在、array_values() は数値配列のインデックスを適切に再作成しますが、配列からすべてのキー文字列を削除し、それらを数値に置き換えます。キー名 (文字列) を保持する必要がある場合、またはすべてのキーが数値である場合に配列のインデックスを再作成する必要がある場合は、array_merge() を使用します。

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

出力

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)
于 2011-08-02T15:57:47.963 に答える
228
$key = array_search($needle, $array);
if ($key !== false) {
    unset($array[$key]);
}
于 2011-11-15T11:29:01.617 に答える
100
unset($array[$index]);
于 2008-12-15T20:31:31.730 に答える
70

すべての値が一意である (または一意ではないが、特定の値のすべてのインスタンスを削除したい) 数値でインデックス付けされた配列がある場合、次のように単に array_diff() を使用して一致する要素を削除できます。

$my_array = array_diff($my_array, array('Value_to_remove'));

例えば:

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

これにより、次のように表示されます。

4
3

この例では、最初の配列のサイズが 4 で、削除後に 3 を報告する sizeof() 呼び出しで確認できるように、値が「Charles」の要素が削除されます。

于 2012-11-26T08:25:05.223 に答える
69

また、名前付き要素の場合:

unset($array["elementName"]);
于 2010-07-31T01:06:55.353 に答える
38

配列の 1 つの要素を破棄する

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

出力は次のようになります。

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

配列のインデックスを再作成する必要がある場合:

$array1 = array_values($array1);
var_dump($array1);

出力は次のようになります。

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

配列の末尾から要素をポップ- 削除された要素の値を返します

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

出力は次のようになります。

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

配列から最初の要素 (赤) を削除します , - 削除された要素の値を返します

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

出力は次のようになります。

Array
(
    [b] => green
    [c] => blue
)
First Color: red
于 2015-07-19T15:37:39.617 に答える
37
<?php
    $stack = ["fruit1", "fruit2", "fruit3", "fruit4"];
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

出力:

[
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
]

fruit1
于 2013-06-11T05:51:47.663 に答える
21

unset()指定された変数を破棄します。

関数内の動作はunset()、破棄しようとしている変数のタイプによって異なります。

グローバル化された変数がunset()関数内にある場合、ローカル変数のみが破棄されます。呼び出し環境の変数は、呼び出される前と同じ値を保持しますunset()

<?php
    function destroy_foo()
    {
        global $foo;
        unset($foo);
    }

    $foo = 'bar';
    destroy_foo();
    echo $foo;
?>

上記のコードの答えはbarになります。

unset()関数内のグローバル変数に:

<?php
    function foo()
    {
        unset($GLOBALS['bar']);
    }

    $bar = "something";
    foo();
?>
于 2013-07-26T20:11:54.043 に答える
19
// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}
于 2016-04-02T18:42:29.633 に答える
10

可変属性を持つ特定のオブジェクトがあったと言いたいのですが(基本的にテーブルをマッピングしていて、テーブルの列を変更していたので、テーブルを反映するオブジェクトの属性も異なります):

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){}
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]);
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

の全体的な目的$fieldsはただだったので、コードが変更されたときにコードのあらゆる場所を調べる必要はありません。クラスの先頭を見て、属性のリストと$fields配列の内容を変更して、新しいものを反映するだけです。属性。

于 2013-08-21T02:31:03.403 に答える
6

次のコードを使用します。

$arr = array('orange', 'banana', 'apple', 'raspberry');
$result = array_pop($arr);
print_r($result);
于 2013-05-17T08:56:09.923 に答える
6
<?php
    // If you want to remove a particular array element use this method
    $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");

    print_r($my_array);
    if (array_key_exists("key1", $my_array)) {
        unset($my_array['key1']);
        print_r($my_array);
    }
    else {
        echo "Key does not exist";
    }
?>

<?php
    //To remove first array element
    $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
    print_r($my_array);
    $new_array = array_slice($my_array, 1);
    print_r($new_array);
?>


<?php
    echo "<br/>    ";
    // To remove first array element to length
    // starts from first and remove two element
    $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
    print_r($my_array);
    $new_array = array_slice($my_array, 1, 2);
    print_r($new_array);
?>

出力

 Array ( [key1] => value 1 [key2] => value 2 [key3] =>
 value 3 ) Array (    [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
 Array ( [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
 Array ( [key2] => value 2 [key3] => value 3 )
于 2016-08-16T15:36:02.923 に答える