FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Hur gör jag bäst följande i php.
$string = "a1b12ccc3d44"; Jag vill splitta denna sträng mellan numeriska och ickenumeriska tecken, och få en array som ska se ut så här: $stringarray[0] = "a" $stringarray[1] = "1" $stringarray[2] = "b" $stringarray[3] = "12" $stringarray[4] = "ccc" $stringarray[5] = "3" $stringarray[6] = "d" $stringarray[7] = "44" Är usel på regex men gissar att det är vägen att gå. |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Bara ett inlägg till!
|
Citat:
|
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Vet inte hur man lägger ihop det till en reg exp. Men kan du köra den två ggr så kan du använda.
(\D*) för a-z (\d*) för 0-9 |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Supermoderator
|
Enklast är att använda preg_split:
Kod:
$stringarray = preg_split('/([0-9]+)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
Tack!
Jag har även fått ett annat förslag privat, som också fixar problemet. Kod:
preg_match_all("/([a-zA-Z]+|[0-9]+)/", $string, $stringarray); |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
Skillnaden är väl att preg_match_all() skapar skapar subarrayer medan preg_splkit() gör det i en nivå. Se exempelkoden nedan. Jag är ingen stjärna på PHP men det var kul att testa i alla fall.
Kod:
<?php class SplitStringNum { public function SplitStringNum1($string) { $stringarray = preg_split('/([0-9]+)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);; return $stringarray; } public function SplitStringNum2($string) { preg_match_all("/([a-zA-Z]+|[0-9]+)/", $string, $stringarray); return $stringarray; } public function PrintStringArray($stringarray) { foreach ($stringarray as $string) { if (is_array($string)) { echo "-----------------------------------------\n" ; echo "------- This also has a sub array -------\n" ; echo "-----------------------------------------\n" ; $this->PrintStringArray($string); } else { echo $string . "\n"; } } } } class SplitStringNumTest { public function Test() { $string = "a1b12ccc3d44"; echo "\n-----------------------------------------\n" ; echo "First attempt to se content of parameters\n"; echo "-----------------------------------------\n" ; $StringNum1 = new SplitStringNum(); $stringarray1 = $StringNum1->SplitStringNum1($string); $StringNum1->PrintStringArray($stringarray1); echo "\n-----------------------------------------\n"; echo "Second attempt to se content of parameters\n"; $StringNum2 = new SplitStringNum(); $stringarray2 = $StringNum2->SplitStringNum2($string); $StringNum2->PrintStringArray($stringarray2); } } $test = new SplitStringNumTest(); $test->Test(); ?> Senast redigerad av Conny Westh den 2013-01-15 klockan 09:42 |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Supermoderator
|
Jo, det funkar också. Ska du bara splitta strängen så är dock preg_split bättre och det mer intuitiva valet. Den är 25-30% snabbare i det här fallet.
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
Svara |
|
|