Alternatywa dla podziału PHP?


92

PHP mówi mi, że podział jest przestarzały, jaką alternatywną metodę powinienem użyć?

Odpowiedzi:


131

explodejest alternatywą. Jeśli jednak zamierzałeś podzielić wyrażenie regularne , alternatywą jest preg_splitzamiast tego.


15
Nie zgadzam się - explodenie jest alternatywą, ponieważ nie spełnia tej samej funkcji, co split, to znaczy: dzielenia łańcucha za pomocą wyrażenia regularnego . W tym celu użyj preg_split.
nickf

1
@nickf: Słusznie wskazano, powinienem był to dodać na początku. Dzięki
Sarfraz,

W różnych językach 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.
Wiktor Stribiżew

Jest kompatybilny z String.Split () języka Visual Basic .NET. Nicea
Md Ashraful Islam

22

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.


16
  • 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.


7

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

Jak użyto split ()

<?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

Jak można użyć funkcji explode ()

<?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ć :)


2

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



0

Jeśli chcesz podzielić ciąg na słowa, możesz użyć funkcji explode () lub str_word_count ().


0

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;
  }
}
?>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.