Wie finde ich einen Wert in einem Array und entferne ihn mithilfe von PHP-Array-Funktionen?

Lesezeit: 5 Minuten

Benutzer-Avatar
ENTWICKLUNGEN

Wie finde ich heraus, ob ein Wert in einem Array vorhanden ist, und entferne ihn dann? Nach dem Entfernen benötige ich die sequentielle Indexreihenfolge.

Gibt es hierfür in PHP integrierte Array-Funktionen?

Benutzer-Avatar
mohitsoni

Um ein Element in einem Array zu suchen, können Sie verwenden array_search Funktion und um ein Element aus einem Array zu entfernen, das Sie verwenden können unset Funktion. Ex:

<?php
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page');

print_r($hackers);

// Search
$pos = array_search('Linus Trovalds', $hackers);

// array_seearch returns false if an element is not found
// so we need to do a strict check here to make sure
if ($pos !== false) {
    echo 'Linus Trovalds found at: ' . $pos;

    // Remove from array
    unset($hackers[$pos]);
}

print_r($hackers);

Sie können sich beziehen auf: https://www.php.net/manual/en/ref.array.php für weitere Array-bezogene Funktionen.

  • Was ist, wenn es keine genaue Übereinstimmung gibt? Wie führe ich eine Wildcard-Suche durch?

    – Clain Dsilva

    12. November 2014 um 2:26 Uhr

  • Beachte das auch unset() verwandelt das Array in ein assoziatives Array. Um es wieder in ein Array (ohne Schlüssel) umzuwandeln, verwenden Sie array_values()

    – Jespertheend

    3. August 2016 um 21:36 Uhr


  • Um nach dem Wert eines Schlüssels zu suchen, können Sie dies mit kombinieren array_columndh: $pos = array_search(1234, array_column('id', $dataset));

    – Geoffrey

    1. Januar 2017 um 3:41 Uhr

<?php
$my_array = array('sheldon', 'leonard', 'howard', 'penny');
$to_remove = array('howard');
$result = array_diff($my_array, $to_remove);
?>

  • Kann mehrere Werte ohne Schleifen entfernen!

    – dfmiller

    4. März 2014 um 22:15 Uhr

  • +1 vermeidet das mühsame Überprüfen des Rückgabewerts von array_search

    – Rinogo

    15. Juli 2014 um 14:25 Uhr

  • Scheint effizienter zu sein, das Array $to_remove kann mit einer array_search- oder preg_grep-Funktion erstellt werden, falls Sie die Platzhaltersuche verwenden, um Elemente zu entfernen.

    – Clain Dsilva

    12. November 2014 um 2:30 Uhr

  • Diese Lösung ist für mich sauberer. Beachten Sie jedoch, dass Indizes beibehalten werden. Wenn Sie sie also in numerischer Reihenfolge neu anordnen möchten, sollten Sie dies tun: array_values(array_diff($my_array, $to_remove))

    – luis.ap.uyen

    27. November 2018 um 13:48 Uhr


  • Dies sollte die richtige Antwort sein. Wenn der Wert nicht gefunden wird, bleibt das Array unberührt. Vielen Dank!

    – gtamboro

    19. Februar um 14:55 Uhr

Benutzer-Avatar
Kerry Jones

Sie müssen zuerst den Schlüssel des Arrays finden, dies kann mit erfolgen array_search()

Wenn Sie fertig sind, verwenden Sie die nicht gesetzt()

<?php
$array = array( 'apple', 'orange', 'pear' );

unset( $array[array_search( 'orange', $array )] );
?>

  • Dies ist das Ergebnis-Array ( [0] => Apfel [1] => orange [2] => Birne [3] => grün ) Warnung: Falsche Parameteranzahl für array_search() in C:\wamp\www\test\test.php auf Zeile 5 Array ( [0] => Apfel [1] => orange [2] => Birne [3] => grün )

    – DEVOPS

    17. Juni 2010 um 6:43 Uhr

  • @learner das Heuhaufen-Argument fehlte de3.php.net/manual/en/function.array-search.php – Das Handbuch ist dein Freund.

    – Gordon

    17. Juni 2010 um 6:45 Uhr

  • Jawohl. das wird funktionieren $array = array( ‘apfel’, ‘orange’, ‘birne’, ‘grün’ ); unset($array[array_search(‘orange’, $array)]); aber die Array-Sequenz fehlt. Wie man das korrigiert

    – DEVOPS

    17. Juni 2010 um 6:49 Uhr

  • Was meinst du damit, dass die Sequenz fehlt? In welcher Reihenfolge soll es sein?

    – Kerry Jones

    17. Juni 2010 um 6:53 Uhr

  • Array-Index ist 0 2 3 4 ist jetzt 1 fehlt Ich brauche es wie 0 1 2 4 .. usw

    – DEVOPS

    17. Juni 2010 um 6:54 Uhr

Nur für den Fall, dass Sie einen der genannten Codes verwenden möchten, beachten Sie dies array_search gibt FALSE zurück, wenn die „Nadel“ nicht in „Heuhaufen“ gefunden wird und daher würden diese Beispiele das erste (null-indizierte) Element zurücksetzen. Verwenden Sie stattdessen Folgendes:

<?php
$haystack = Array('one', 'two', 'three');
if (($key = array_search('four', $haystack)) !== FALSE) {
  unset($haystack[$key]);
}
var_dump($haystack);

Das obige Beispiel wird ausgegeben:

Array
(
    [0] => one
    [1] => two
    [2] => three
)

Und das ist gut!

Benutzer-Avatar
Höhle Johnson

Sie können verwenden array_filter um Elemente eines Arrays basierend auf einer Callback-Funktion herauszufiltern. Die Rückruffunktion nimmt jedes Element des Arrays als Argument und Sie kehren einfach zurück false wenn dieses Element entfernt werden soll. Dies hat auch den Vorteil, dass doppelte Werte entfernt werden, da das gesamte Array gescannt wird.

Sie können es wie folgt verwenden:

$myArray = array('apple', 'orange', 'banana', 'plum', 'banana');
$output = array_filter($myArray, function($value) { return $value !== 'banana'; });
// content of $output after previous line:
// $output = array('apple', 'orange', 'plum');

Und wenn Sie das Array neu indizieren möchten, können Sie das Ergebnis an übergeben array_values so was:

$output = array_values($output);

Benutzer-Avatar
Gemeinschaft

Diese Lösung ist die Kombination aus der Lösung von @Peter zum Löschen mehrerer Vorkommen und der Lösung von @chyno zum Entfernen des ersten Vorkommens. Das ist es, was ich benutze.

/**
 * @param array $haystack
 * @param mixed $value
 * @param bool $only_first
 * @return array
 */
function array_remove_values(array $haystack, $needle = null, $only_first = false)
{
    if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); }
    if (empty($haystack)) { return $haystack; }

    if ($only_first) { // remove the first found value
        if (($pos = array_search($needle, $haystack)) !== false) {
            unset($haystack[$pos]);
        }
    } else { // remove all occurences of 'needle'
        $haystack = array_diff($haystack, array($needle));
    }

    return $haystack;
}

Schauen Sie auch hier: PHP-Array löschen nach Wert (nicht Schlüssel)

Benutzer-Avatar
Robert Witting

Das unset array_search hat einige ziemlich schreckliche Nebenwirkungen, da es versehentlich das erste Element aus Ihrem Array entfernen kann, unabhängig vom Wert:

        // bad side effects
        $a = [0,1,2,3,4,5];
        unset($a[array_search(3, $a)]);
        unset($a[array_search(6, $a)]);
        $this->log_json($a);
        // result: [1,2,4,5]
        // what? where is 0?
        // it was removed because false is interpreted as 0

        // goodness
        $b = [0,1,2,3,4,5];
        $b = array_diff($b, [3,6]);
        $this->log_json($b);
        // result: [0,1,2,4,5]

Wenn Sie wissen, dass der Wert garantiert im Array ist, machen Sie es, aber ich denke, das array_diff ist weitaus sicherer. (Ich benutze php7)

  • Nur wenn Sie keinen strengen Vergleich für false. Die Antworten von Algorhythm und Chyno vor vielen Jahren machen diesen Fehler nicht.

    – mickmackusa

    22. Januar um 4:19 Uhr


1345000cookie-checkWie finde ich einen Wert in einem Array und entferne ihn mithilfe von PHP-Array-Funktionen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy