2010-11-08 17 views
13

Czy można usunąć ciąg znaków (patrz przykład poniżej) z tablicy PHP bez znajomości indeksu?Usunąć ciąg znaków z tablicy PHP?

przykład:

array = array("string1", "string2", "string3", "string4", "string5"); 

trzeba usunąć String3.

Odpowiedz

23
$index = array_search('string3',$array); 
if($index !== FALSE){ 
    unset($array[$index]); 
} 

jeśli uważasz, że wartość będzie tam więcej niż jeden raz spróbować użyć array_keys o wartości wyszukiwania, aby uzyskać wszystkie indeksy. Prawdopodobnie będziesz chciał upewnić

EDIT:

uwaga, że ​​indeksy pozostają niezmienione podczas korzystania unset. Jeśli jest to problem, istnieje niezła odpowiedź: here, która pokazuje, jak to zrobić, używając array_splice.

+0

Podoba mi się ten +1 dla Ciebie. Ale jak mogę potwierdzić, że został usunięty (wyświetlić na ekranie)? –

+0

Sprawdź funkcje php: print_r i var_dump. Możesz ich użyć do zrzutu zawartości twojej tablicy. – GWW

+0

Zauważ, że użycie unset() spowoduje, że indeksy pozostaną nietknięte: http://stackoverflow.com/a/369761/176140 – schellmax

1

To zależy od tego, jak duża jest tablica i istnieje wiele opcji.

Jeśli jest zwykle dość mały, array_diff jest prawdopodobnie najszybszym spójnym rozwiązaniem, jak napisał Jorge.

Innym rozwiązaniem dla nieco większych zestawach:

$data = array_flip($data); 
unset($data[$item2remove]); 
$data = array_flip($data); 

Ale to jest tylko dobra, jeśli nie masz duplikatów. W zależności od obciążenia może być korzystne zagwarantowanie wyjątkowości elementów.

4

Możesz to zrobić.

$arr = array("string1", "string2", "string3", "string4", "string5"); 
$new_arr=array(); 
foreach($arr as $value) 
{ 
    if($value=="string3") 
    { 
     continue; 
    } 
    else 
    { 
     $new_arr[]=$value; 
    }  
} 
print_r($new_arr); 
3

Użyj kombinacji array_search i array_splice.

function array_remove(&$array, $item){ 
    $index = array_search($item, $array); 
    if($index === false) 
    return false; 
    array_splice($array, $index, 1); 
    return true; 
} 
2

Prawdopodobnie nie jest to najszybsza metoda, ale jest to krótki i schludny jeden wiersz kodu:

$array = array_diff($array, array("string3")) 

lub jeśli używasz PHP> 5.4.0 lub nowszy:

$array = array_diff($array, ["string3"]) 
+1

Wyznaczyłem metodę przeciwko GWW w pętli for, która działa 2,5 miliona razy. Twoje ukończenie trwało 18 sekund (17 sekund, gdy nie używałem zmiennych), natomiast GWW ukończyło w 16 sekund. Więc 'array_diff' jest wolniejszy, ponieważ zajmuje się tablicą zamiast pojedynczego łańcucha, powodując narzut. Jeśli istniała tylko funkcja taka jak "array_diff", ale w celu usunięcia pojedynczego łańcucha w tablicy. – FluorescentGreen5

Powiązane problemy