Alternatywa dla podziału PHP?

92

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

igorgue
źródło

Odpowiedzi:

131

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

Sarfraz
źródło
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.

salathe
źródło
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.

tplaner
źródło
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ć :)

i.jolly
źródło
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

Andre Cotelo
źródło
1

Tak, użyłbym eksplozji lub możesz użyć:

preg_split

Która metoda jest zalecana w PHP 6. preg_split Documentation

Addo Solutions
źródło
0

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

Alexandrw
źródło
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;
  }
}
?>
Ferdinand
źródło