2017-05-26 5 views
1

Wenn ich einen Wert haben '28' und ich möchte ein Array für den Index durchsuchen, die diesen Wert enthält, und entfernen Sie es. Gibt es eine Möglichkeit, ohne eine for-Schleife durch jedes Element im Array zu führen?Entfernen Sie ein Array-Element in indizierten Array mit Schlüssel

In diesem Fall würde ich möchte das Element entfernen $terms[7] or 6 => 28

$needle = 28; 
$terms = array(
    0 => 42 
    1 => 26 
    2 => 27 
    3 => 43 
    4 => 21 
    5 => 45 
    6 => 28 
    7 => 29 
    8 => 30 
    9 => 31 
    10 => 46 
); 
+0

Dies ist ein wenig schwierig basierend auf Ihren Programmen benötigt. Kann 28 mehrmals vorkommen? Müssen alle Instanzen Ihres Suchbegriffs oder nur der erste gefunden werden? Lang oder kurz ist es in jedem Fall notwendig, eine Schleife in einem unsortierten Array zu verwenden, mit einigen leichten Effizienzverbesserungen basierend auf den funktionalen Anforderungen, die vorgenommen werden können. –

+0

@ Patrick - Es wird nur einmal im Array angezeigt. Die Zahl 28 steht für den aktuellen Seitenbegriff/die aktuelle Kategorie. Danke – George

Antwort

4
if (false !== array_search('28', $terms)) { 
     unset($terms[array_search('28', $terms)]); 
} 
1

Sie array_keys können alle indexs der Nadel zu finden.

array_keys

<?php 
    $needle = 28; 
    $haystack = [42, 26, 27, 43, 21, 45, 28, 29, 30, 31, 28, 46]; 
    $results = array_keys($haystack, $needle, true); 
    while (!empty($results)) { 
     unset($haystack[array_shift($results)]); 
    } 
+0

Wenn Sie nur das OP auf eine Funktion zeigen wollen, dann ist es ein Kommentar und keine Antwort. Wenn Sie etwas Code zusammen mit einer Erklärung schreiben wollen, wird es eine Antwort das OP und andere können jetzt verstehen und nutzen, und wenn andere die Antwort sehen – RiggsFolly

+0

Punkt genommen. Ich habe ein Beispiel hinzugefügt, das das Problem mit mehreren Übereinstimmungen behebt. –

2

Wie oben erwähnt, verwenden array_search() das Element zu finden. Verwenden Sie dann unset(), um es aus dem Array zu entfernen.

$haystack = [42, 28, 27, 45]; 
$needle = 28; 

$index = array_search($needle, $haystack); 

if ($index !== false) { 
    unset($haystack[$index]); 
} else { 
    // $needle not present in the $haystack 
} 
Verwandte Themen