| 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å. |
||
|
|
Svara med citat
|
|
|
#2 | |||
|
||||
|
Bara ett inlägg till!
|
Citat:
|
|||
|
|
Svara med 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 |
||
|
|
Svara med citat
|
|
|
#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 |
||
|
|
Svara med citat
|
|
|
#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);
|
||
|
|
Svara med citat
|
|
|
#6 | ||
|
|||
|
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 med citat
|
|
|
#7 | ||
|
|||
|
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 10:42 |
||
|
|
Svara med citat
|
| Svara |
| Ämnesverktyg | |
| Visningsalternativ | |
|
|