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.
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.
$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
.
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.
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);
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;
}
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"])
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
Podoba mi się ten +1 dla Ciebie. Ale jak mogę potwierdzić, że został usunięty (wyświetlić na ekranie)? –
Sprawdź funkcje php: print_r i var_dump. Możesz ich użyć do zrzutu zawartości twojej tablicy. – GWW
Zauważ, że użycie unset() spowoduje, że indeksy pozostaną nietknięte: http://stackoverflow.com/a/369761/176140 – schellmax