Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]explode czy substr, co stosujecie?
Forum PHP.pl > Forum > Przedszkole
Janusz1200
Witam, mam string który być może zawiera spację. Aby wyciągnąć część przed spacją, co Panowie stosują, explode czy substr z strpos, czy też może coś innego?
DiH
Sposobów jest cała masa, zależy upodobań i konkretnego przypadku, np: preg_match i #(\w+)\s|\w+#
sadistic_son
Wyrażenia regularne w tak prostym zastosowaniu nie są zbyt dobrym pomysłem. Najprościej i chyba najoptymalniej będzie użyć explode.
  1. $string='aaaaa bbbbb ccccc ddddd';
  2. $przedspacja=explode(' ',$string);
  3. $przedspacja=$przedspacja[0];
Janusz1200
Dzięki. Ale dlaczego nie można tak
$przedspacja=explode(" ", $string)[0];

questionmark.gif?
W tym PHP nie ma "łańcuszków"??
DiH
Racja, tylko że w pytaniu było "być może zawiera spację". A wtedy twój kod nie zadziała, bo nie ma po czym rozbijać stringa.
Crozin
@Janusz1200: W dużym skrócie: bo deweloperzy PHP dali dupy. Takie coś i wiele temu podobnych powinno być obsługiwane ale nie jest.

Najnormalniejszym było by wyszukanie pozycji tej spacji i ucięcie tekstu do tego momentu:
  1. $pos = mb_strpos($myString, ' ');
  2. if ($pos !== false) {
  3. $myString = mb_substr($myString, 0, $pos);
  4. }
Janusz1200
Cytat(DiH @ 25.07.2011, 12:47:48 ) *
Racja, tylko że w pytaniu było "być może zawiera spację". A wtedy twój kod nie zadziała, bo nie ma po czym rozbijać stringa.

Zadziała, bo zwróci cały string, jak jest napisane w manualu.

Cytat(Crozin @ 25.07.2011, 12:53:32 ) *
@Janusz1200: W dużym skrócie: bo deweloperzy PHP dali dupy. Takie coś i wiele temu podobnych powinno być obsługiwane ale nie jest.

Najnormalniejszym było by wyszukanie pozycji tej spacji i ucięcie tekstu do tego momentu:
  1. $pos = mb_strpos($myString, ' ');
  2. if ($pos !== false) {
  3. $myString = mb_substr($myString, 0, $pos);
  4. }


"bo deweloperzy PHP dali dupy". No, dobrze wiedzieć, że nie zawsze tylko ja daję dupy.
A co do kodu, wygodniejsze jest explode, moim zdaniem, ale bałem się o wydajność (przy 100 stringach to chyba nie ma znaczenia, prawda?)
thek
@Crozin:

Return dla explode w przypadku braku spacji za manualem:
Cytat
If delimiter is an empty string (""), explode() will return FALSE. If delimiter contains a value that is not contained in string and a negative limit is used, then an empty array will be returned, otherwise an array containing string will be returned.

Tak czy inaczej odwołamy sie do tego jako $wynik[0] wink.gif
Najwydajniej więc zrobić:
  1. $wynik = explode( ' ', $string, 2 );
  2. return $wynik[0];
bo nie będzie nam tworzyć tablicy X-elementowej, ale przy znalezieniu pierwszej spacji resztę tekstu od razu walnie do $wynik[1] i zakończy działanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.