2009-04-04 22 views
17
$split_point = ' - '; 
$string = 'this is my - string - and more'; 

Jak mogę dokonać podziału za pomocą drugiej instancji $ split_point, a nie pierwszej. Czy mogę określić jakoś prawo do lewego wyszukiwania? Najlepsze proste podejście?Jak eksplodować ciąg od prawej do lewej?

Zasadniczo jak eksplodować od prawej do lewej. Chcę odebrać ostatnią instancję "-".

Wynik muszę:

$item[0]='this is my - string'; $item[1]='and more'; 

a nie:

$item[0]='this is my'; $item[1]='string - and more'; 
+1

co chcesz dostać? – SilentGhost

+0

Wynik: $ item [0] = 'this is my - string'; $ item [1] = 'and more'; – Codex73

+0

Po eksplozji tablicy będzie: "to jest mój", "ciąg", "i więcej" –

Odpowiedz

26

Można użyć strrev odwrócić ciąg, a następnie odwrócić wyniki tylna

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$result = array_map('strrev', explode($split_point, strrev($string))); 

Nie jestem pewien, czy jest to najlepsze rozwiązanie, choć.

+1

Kreatywne! rozwiązanie! – Evert

+0

Brzmi świetnie,., Wow ... Spróbuję teraz i zobacz. – Codex73

+0

Dlaczego używać podziału i nie eksplodować? Jakiekolwiek różnice? – Codex73

4

Jeśli dobrze rozumiem, chcesz przykład przypadek dać ('to jest mój - string' „i więcej ")?

Wbudowany split/explode wydaje się być tylko forwardowaniem - prawdopodobnie będziesz musiał go zaimplementować samodzielnie za pomocą strrpos. (Prawo-lewo wyszukiwania)

$idx = strrpos($string, $split_point); 
$parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point))) 
2

Dlaczego nie podzielić na "-", ale następnie dołączyć do dwóch pierwszych wpisów tablicy, które otrzymasz z powrotem?

+0

brzmi interesująco. – Codex73

+0

, ale muszę podzielić na ostatniej instancji zawsze z -. – Codex73

+0

+1, najprostszy sposób – SilentGhost

12

Jak o tym:

$parts = explode($split_point, $string); 
$last = array_pop($parts); 
$item = array(implode($split_point, $parts), $last); 

nie wygra żadnej nagrody w golfa, ale pokazuje intencje i działa dobrze, myślę.

+0

Działa z ciągami utf-8 (np. Arabski) –

0

Zakładając, że chcą tylko pierwsze wystąpienie $ split_point być ignorowane, to powinien pracować dla Ciebie:

# retrieve first $split_point position 
$first = strpos($string, $split_point); 
# retrieve second $split_point positon 
$second = strpos($string, $split_point, $first+strlen($split_point)); 
# extract from the second $split_point onwards (with $split_point) 
$substr = substr($string, $second); 

# explode $substr, first element should be empty 
$array = explode($split_point, $substr); 

# set first element as beginning of string to the second $split_point 
$array[0] = substr_replace($string, '', strpos($string, $substr)); 

To pozwoli podzielić na każdym wystąpieniu $ split_point po (włącznie) na sekundę występowanie $ split_point.

1

I natknął uppon takie same, i naprawić go tak:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$reverse_explode = array_reverse(explode($split_point, $string)); 
5

Oto kolejny sposób to zrobić:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$stringpos = strrpos($string, $split_point, -1); 
$finalstr = substr($string,0,$stringpos); 
0
$split_point = ' - '; 
$string = 'this is my - string - and more'; 
$result = end(explode($split_point, $string)); 

ta działa poprawnie

1

Podobała mi się odpowiedź Moffa, ale poprawiłem ją, ograniczając liczbę elementów do 2 i ponownie odwracając tablicę:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$result = array_reverse(array_map('strrev', explode($split_point, strrev($string),2))); 

Następnie $ wynik będzie:

Array ([0] => this is my - string [1] => and more) 
2

to jest mój - łańcuch - i więcej

  1. Zastosowanie wspólnego eksplodować funkcji, aby uzyskać wszystkie ciągi
  2. Get sizeof tablicę i pobierz ostatni element
  3. Pop last item using a funkcja rray_pop.
  4. Implode pozostały ciąg z tym samym ogranicznikiem (jeśli chcesz używać innego ogranicznika).

Kod

$arrSpits=explode("", "this is my - string - and more"); 
$arrSize=count($arrSpits); 

echo "Last string".$arrSpits[arrSize-1];//Output: and more 


array_pop(arrSpits); //now pop the last element from array 

$firstString=implode("-", arrSpits); 
echo "First String".firstString; //Output: this is my - string 
Powiązane problemy