web-dev-qa-db-ger.com

PHP: Wie entferne ich ein bestimmtes Element aus einem Array?

Wie entferne ich ein Element aus einem Array, wenn ich den Elementnamen kenne? zum Beispiel:

Ich habe ein Array:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

der Benutzer gibt strawberry ein

strawberry wird entfernt.

Um es vollständig zu erklären:

Ich habe eine Datenbank, in der eine durch Kommas getrennte Liste von Elementen gespeichert ist. Der Code wird basierend auf einer Benutzerauswahl, in der sich diese Wahl befindet, in der Liste abgerufen. Wenn sie sich also für Strawberry entscheiden, zieht sie den Code in jeden Eintrag, in dem sich Strawberry befindet, und konvertiert diesen dann mit split () in ein Array. Ich möchte, dass sie die vom Benutzer ausgewählten Elemente, für dieses Beispiel Erdbeere, aus dem Array entfernen.

124
dcp3450

Verwenden Sie array_search , um den Schlüssel zu erhalten, und entfernen Sie ihn mit unset , falls gefunden:

if (($key = array_search('strawberry', $array)) !== false) {
    unset($array[$key]);
}

array_search gibt false zurück (null bis PHP 4.2.0), wenn kein Element gefunden wurde.

Wenn mehrere Elemente mit demselben Wert vorhanden sein können, können Sie array_keys verwenden, um die Schlüssel für alle Elemente zu erhalten:

foreach (array_keys($array, 'strawberry') as $key) {
    unset($array[$key]);
}
247
Gumbo

Verwenden Sie array_diff() für eine einzeilige Lösung:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string
$array_without_strawberries = array_diff($array, array('strawberry'));
print_r($array_without_strawberries);

... Keine zusätzlichen Funktionen oder foreach-Schleife erforderlich.

115
ills
if (in_array('strawberry', $array)) 
{
    unset($array[array_search('strawberry',$array)]);
}
34
John Conde

Wenn Sie hier ein einfaches Array verwenden (was wie der Fall aussieht), sollten Sie stattdessen diesen Code verwenden:

if (($key = array_search('strawberry', $array)) !== false) {
    array_splice($array, $key, 1);
}

unset($array[$key]) entfernt nur das Element, ordnet jedoch das einfache Array nicht neu an.

Angenommen, wir haben ein Array und verwenden array_splice:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
array_splice($array, 2, 1);
json_encode($array); 
// yields the array ['Apple', 'orange', 'blueberry', 'kiwi']

Im Vergleich zu unset:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[2]);
json_encode($array);
// yields an object {"0": "Apple", "1": "orange", "3": "blueberry", "4": "kiwi"}

Beachten Sie, dass unset($array[$key]) das Array nicht neu anordnet.

18
ericluwj

Sie können den Array-Filter verwenden, um die Elemente nach einer bestimmten Bedingung in $v zu entfernen:

$arr = array_filter($arr, function($v){
    return $v != 'some_value';
});
9
srcspider

Dies ist eine einfache Wiederholung, mit der mehrere Werte im Array gelöscht werden können.

    // 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]);
    }
4
mmr

Ich benutze gerade diese Funktion:

function array_delete($del_val, $array) {
    if(is_array($del_val)) {
         foreach ($del_val as $del_key => $del_value) {
            foreach ($array as $key => $value){
                if ($value == $del_value) {
                    unset($array[$key]);
                }
            }
        }
    } else {
        foreach ($array as $key => $value){
            if ($value == $del_val) {
                unset($array[$key]);
            }
        }
    }
    return array_values($array);
}

Sie können ein Array oder nur eine Zeichenfolge mit den Elementen eingeben, die entfernt werden sollen. Schreiben Sie es so:

$detils = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$detils = array_delete(array('orange', 'Apple'), $detils);

OR

$detils = array_delete('orange', $detils);

Es wird auch neu indiziert.

3
jankal

Wird so sein:

 function rmv_val($var)
 {
     return(!($var == 'strawberry'));
 }

 $array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

 $array_res = array_filter($array, "rmv_val");
2
D.Martin

Die Antwort auf PHP - Array lösche nach Wert (nicht Schlüssel) Vorgegeben von https://stackoverflow.com/users/924109/rok-kralj

IMO ist die beste Antwort, da es entfernt und nicht mutiert 

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

Es lässt sich gut verallgemeinern. Sie können beliebig viele Elemente gleichzeitig entfernen, wenn Sie möchten.

Haftungsausschluss: Beachten Sie, dass meine Lösung eine neue Kopie des Arrays erzeugt, während die alte im Gegensatz zu der akzeptierten Antwort, die mutiert, erhalten bleibt. Aus diesem Grund könnte es etwas langsamer sein.

1
hounded

Ein besserer Ansatz wäre vielleicht, Ihre Werte als Schlüssel in einem assoziativen Array zu behalten und dann array_keys() aufzurufen, wenn Sie ein Array tatsächlich verwenden möchten. Auf diese Weise müssen Sie nicht array_search verwenden, um Ihr Element zu finden.

1
jishi

Diese Frage hat mehrere Antworten, aber ich möchte noch etwas hinzufügen, da ich bei der Verwendung von unset oder array_diff einige Probleme hatte, mit den Indizes des neuen Arrays zu spielen, als das bestimmte Element entfernt wurde (da der ursprüngliche Index gespeichert wurde)

Ich komme zurück zum Beispiel:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_without_strawberries = array_diff($array, array('strawberry'));

oder

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[array_search('strawberry', $array)]);

Wenn Sie das Ergebnis ausdrucken, erhalten Sie:

foreach ($array_without_strawberries as $data) {
   print_r($data);
}

Ergebnis:

> Apple
> orange
> blueberry
> kiwi

Die Indizes werden jedoch gespeichert, und Sie können auf Ihr Element wie folgt zugreifen:

$array_without_strawberries[0] > Apple
$array_without_strawberries[1] > orange
$array_without_strawberries[3] > blueberry
$array_without_strawberries[4] > kiwi

Daher wird das letzte Array nicht erneut indiziert. Sie müssen also nach der unset oder array_diff hinzufügen:

$array_without_strawberries = array_values($array);

Danach hat Ihr Array einen normalen Index:

$array_without_strawberries[0] > Apple
$array_without_strawberries[1] > orange
$array_without_strawberries[2] > blueberry
$array_without_strawberries[3] > kiwi

Zu diesem Beitrag verwandt: Re-Index Array

 enter image description here

Ich hoffe es wird helfen

1
Jordan Montel
$remove= "strawberry";
$array = ["Apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
        if ($value!=$remove) {
        echo $value.'<br/>';
                continue;
        }
}

Ich habe nach der Antwort auf dieselbe Frage gesucht und bin auf dieses Thema gestoßen. Ich sehe zwei Hauptwege: die Kombination von array_search & unset und die Verwendung von array_diff. Auf den ersten Blick schien mir die erste Methode schneller zu sein, da kein zusätzliches Array erstellt werden muss (wie bei array_diff). Aber ich habe einen kleinen Benchmark geschrieben und dafür gesorgt, dass die zweite Methode nicht nur prägnanter, sondern auch schneller ist! Ich freue mich, dies mit Ihnen zu teilen. :) 

https://glot.io/snippets/f6ow6biaol

Nur du kannst eine Zeile machen. Es wird das Element aus dem Array entfernen


$array=array_diff($array,['strawberry']);


0
dılo sürücü
<?php 
$array = array("Apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
0

Ich würde es vorziehen, array_key_exists zu verwenden, um nach Schlüsseln in Arrays zu suchen, wie:

Array([0]=>'A',[1]=>'B',['key'=>'value'])

um die angegebenen effektiv zu finden, da array_search und in_array () hier nicht funktionieren. Und entferne Sachen mit nset ().

Ich denke, es wird jemandem helfen.

0
ddsultan

Erstellen Sie ein numerisches Array mit einem bestimmten Array-Wert

    <?php
    // create a "numeric" array
    $animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive');

    //Normarl display
    print_r($animals);
    echo "<br/><br/>";

    //If splice the array
    //array_splice($animals, 2, 2);
    unset($animals[3]); // you can unset the particular value
    print_r($animals);

    ?>

Sie können diesen Link referenzieren ..

0
Sashtha Manik