PHP mówi mi, że podział jest przestarzały, jaką alternatywną metodę powinienem użyć?
Odpowiedzi:
explodejest alternatywą. Jeśli jednak zamierzałeś podzielić wyrażenie regularne , alternatywą jest preg_splitzamiast tego.
splitmetoda nie zawsze akceptuje wyrażenia regularne. W .NET i Pythonie String.Split()/ str.split()metody akceptują tylko ustalony, dosłowny ciąg znaków jako igłę. Tak więc explodejest poprawne. Dla tych, którzy pochodzą z Java, JavaScript, Ruby, preg_splitmoże okazać się rozwiązaniem.
splitjest przestarzały, ponieważ jest częścią rodziny funkcji, które używają wyrażeń regularnych POSIX; że cała rodzina jest przestarzała na rzecz funkcji PCRE ( preg_*).
Jeśli nie potrzebujesz funkcji wyrażeń regularnych, to explodejest to bardzo dobry wybór (i byłby zalecany, splitnawet gdyby nie były przestarzałe), jeśli z drugiej strony musisz użyć wyrażeń regularnych, to alternatywa PCRE jest po prostu preg_split.
preg_split jeśli chcesz podzielić za pomocą wyrażeń regularnych. str_split jeśli chcesz podzielić według znaków. explode jeśli potrzebujesz podzielić na coś prostego.Również na przyszłość, jeśli kiedykolwiek będziesz chciał wiedzieć, czego PHP chce, abyś używał, jeśli coś jest przestarzałe, zawsze możesz sprawdzić funkcję w instrukcji, która podpowie Ci alternatywy.
Chcę tutaj wyjaśnić, że preg_split();jest od tego daleko, ale explode();można go używać w podobny sposób, jaksplit();
Poniżej znajduje się porównanie split();i explode();użycie
<?php
$date = "04/30/1973";
list($month, $day, $year) = split('[/.-]', $date);
echo $month; // foo
echo $day; // *
echo $year;
?>
URL: http://php.net/manual/en/function.split.php
<?php
$data = "04/30/1973";
list($month, $day, $year) = explode("/", $data);
echo $month; // foo
echo $day; // *
echo $year;
?>
URL: http://php.net/manual/en/function.explode.php
Oto jak możemy to wykorzystać :)
Możesz zamiast tego użyć łatwiejszej funkcji preg_match, jest lepsza i szybsza niż wszystkie inne.
$var = "<tag>Get this var</tag>";
preg_match("/<tag>(.*)<\/tag>/", $var , $new_var);
echo $new_var['1'];
Wynik: Get this var
Tak, użyłbym eksplozji lub możesz użyć:
preg_split
Która metoda jest zalecana w PHP 6. preg_split Documentation
Wystąpił ten sam problem, ale mój kod musi działać zarówno na PHP 5, jak i PHP 7.
Oto mój fragment kodu, który rozwiązał ten problem. Wprowadź datę w formacie dmY z jednym z ograniczników „/. -”
<?php
function DateToEN($date){
if ($date!=""){
list($d, $m, $y) = function_exists("split") ? split("[/.-]", $date) : preg_split("/[\/\.\-]+/", $date);
return $y."-".$m."-".$d;
}else{
return false;
}
}
?>
explodenie jest alternatywą, ponieważ nie spełnia tej samej funkcji, cosplit, to znaczy: dzielenia łańcucha za pomocą wyrażenia regularnego . W tym celu użyjpreg_split.