3065 Stimmen

Löschen eines Elements aus einem Array in PHP

Gibt es eine einfache Möglichkeit, ein Element aus einem Array mit PHP zu löschen, so dass foreach ($array) dieses Element nicht mehr enthält?

Ich dachte, dass die Einstellung auf null würde es tun, aber offenbar funktioniert es nicht.

17 Stimmen

Ich würde nicht sagen, dass Konrads Antwort die einfachste auf das genannte Problem ist. Mit unset() werden die Iterationen über das Array den entfernten Wert nicht mehr enthalten. OTOH, es ist wahr, dass Stevan Antwort ist reichlich und, tatsächlich, war die Antwort, die ich gesucht habe - aber nicht die OP :)

48 Stimmen

@danip Dass es im Handbuch leicht zu finden ist, schließt eine Frage auf StackOverflow nicht aus. Wäre die Frage eine duplicado StackOverflow-Frage, dann gehört sie vielleicht nicht hierher. StackOverflow ist ein guter Ort, um Antworten zu finden, noch bevor Sie im Handbuch nachsehen.

7 Stimmen

@unset($array[$key]); $array = array_values($array);

9voto

Sam Tigle Punkte 343

Bearbeiten

Wenn Sie nicht davon ausgehen können, dass sich das Objekt in diesem Array befindet, müssen Sie eine Prüfung hinzufügen:

if(in_array($object,$array)) unset($array[array_search($object,$array)]);

Original-Antwort

Wenn Sie ein bestimmtes Objekt aus einem Array durch eine Referenz auf dieses Objekt entfernen möchten, können Sie Folgendes tun:

unset($array[array_search($object,$array)]);

Beispiel:

<?php
class Foo
{
    public $id;
    public $name;
}

$foo1 = new Foo();
$foo1->id = 1;
$foo1->name = 'Name1';

$foo2 = new Foo();
$foo2->id = 2;
$foo2->name = 'Name2';

$foo3 = new Foo();
$foo3->id = 3;
$foo3->name = 'Name3';

$array = array($foo1,$foo2,$foo3);
unset($array[array_search($foo2,$array)]);

echo '<pre>';
var_dump($array);
echo '</pre>';
?>

Ergebnis:

array(2) {
[0]=>
    object(Foo)#1 (2) {
        ["id"]=>
        int(1)
        ["name"]=>
        string(5) "Name1"
    }
[2]=>
    object(Foo)#3 (2) {
        ["id"]=>
        int(3)
        ["name"]=>
        string(5) "Name3"
    }
}

Beachten Sie, dass das Objekt, wenn es mehrmals vorkommt, nur beim ersten Auftreten entfernt wird!

8voto

Kristoffer Bohmann Punkte 3794

Unset() mehrere, fragmentierte Elemente aus einem Array

Während unset() wurde hier schon mehrfach erwähnt, aber es wurde noch nicht erwähnt, dass unset() akzeptiert mehrere Variablen, was es einfach macht, mehrere, nicht zusammenhängende Elemente aus einem Array in einer Operation zu löschen:

// Delete multiple, noncontiguous elements from an array
$array = [ 'foo', 'bar', 'baz', 'quz' ];
unset( $array[2], $array[3] );
print_r($array);
// Output: [ 'foo', 'bar' ]

unset() dynamisch

unset() akzeptiert kein Array von zu entfernenden Schlüsseln, so dass der folgende Code fehlschlägt (es wäre jedoch etwas einfacher gewesen, unset() dynamisch zu verwenden).

$array = range(0,5);
$remove = [1,2];
$array = unset( $remove ); // FAILS: "unexpected 'unset'"
print_r($array);

Stattdessen kann unset() dynamisch in einer foreach-Schleife verwendet werden:

$array = range(0,5);
$remove = [1,2];
foreach ($remove as $k=>$v) {
    unset($array[$v]);
}
print_r($array);
// Output: [ 0, 3, 4, 5 ]

Array-Schlüssel durch Kopieren des Arrays entfernen

Es gibt noch eine weitere Praxis, die noch nicht erwähnt wurde. Manchmal ist der einfachste Weg, bestimmte Array-Schlüssel loszuwerden, einfach $array1 in $array2 zu kopieren.

$array1 = range(1,10);
foreach ($array1 as $v) {
    // Remove all even integers from the array
    if( $v % 2 ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 1, 3, 5, 7, 9 ];

Dasselbe gilt natürlich auch für Textstrings:

$array1 = [ 'foo', '_bar', 'baz' ];
foreach ($array1 as $v) {
    // Remove all strings beginning with underscore
    if( strpos($v,'_')===false ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 'foo', 'baz' ]

7voto

<?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);
?>

Ausgabe

 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 )

7voto

MahdiY Punkte 1269

Entfernt ein Array-Element basierend auf einem Schlüssel:

Verwenden Sie die unset Funktion wie unten:

$a = array(
       'salam',
       '10',
       1
);

unset($a[1]);

print_r($a);

/*

    Output:

        Array
        (
            [0] => salam
            [2] => 1
        )

*/

Entfernt ein Array-Element basierend auf einem Wert:

Verwenden Sie die array_search Funktion, um einen Elementschlüssel zu erhalten, und verwenden Sie die oben beschriebene Methode, um ein Array-Element wie unten zu entfernen:

$a = array(
       'salam',
       '10',
       1
);

$key = array_search(10, $a);

if ($key !== false) {
    unset($a[$key]);
}

print_r($a);

/*

    Output:

        Array
        (
            [0] => salam
            [2] => 1
        )

*/

6voto

Verwenden Sie den folgenden Code:

$arr = array('orange', 'banana', 'apple', 'raspberry');
$result = array_pop($arr);
print_r($result);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X