27. august 2011 - 19:00
Der er
25 kommentarer
PHP ; explode() ?
Hej. Har fx. sådan en streng her: " A,B;C,D " Jeg kan sagtens få den til at dele den til "A,B og C,D" Men herefter kan jeg ikke få den til at dele til A B C D.. Hjælp ?
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
27. august 2011 - 19:20
#1
<?php $str = " A,B;C,D "; $str = trim($str); $first_part = explode(";", $str); foreach($first_part AS $part) { $second_part[] = explode(",", $part); } } så har du et to-dimensionelt array...
27. august 2011 - 19:28
#2
og så smider jeg et while ind eller hvordan? Planen er at det skal "deles" op hvorefter det skal i sql
27. august 2011 - 19:45
#3
proev evt.: $p = preg_split('/[,;]/', $s, 0, PREG_SPLIT_NO_EMPTY);
27. august 2011 - 19:46
#4
Eller maaske kun: $p = preg_split('/[,;]/', $s);
27. august 2011 - 19:56
#5
PT har jeg kodet så længe jeg ikke lige kan fange meningen ? Kan det ikke laves med 2 x explode(); ?
27. august 2011 - 20:01
#6
splazz'es loesning er 2 x explode min loesning er et enkelt preg?split kald som splitter ved begge tegn
27. august 2011 - 21:47
#7
Svarer imorgen... Har firkantede øjne
27. august 2011 - 22:58
#8
ja det er sq meget smartere med preg_split - jeg er bare elendig til regex brug arne's løsning - er sikker på den performer langt bedre!
28. august 2011 - 01:05
#9
preg_split er kortere kode det er ikke sikkert at den performer bedre - der sker en masse bagved naar man bruger reegx
28. august 2011 - 16:54
#10
Jeg er jo lykkelig nu.. :D Findes der forøvrigt en smartere måde at få skreven et helt array på skærmen uden at skulle blande en while() ind i det ?
28. august 2011 - 19:04
#11
prøv med:
<pre> <?php print_r($dit_array); ?> </pre>
29. august 2011 - 14:06
#12
Hmm.. Jeg var for hurtig... Ex. på en streng: "8045,1314568800,16,6,18,83" Der vil være 287 af disse strenge i ét array. Det er vel ikke muligt, at hvis ovenstående streng fx. var nummer 10, og jeg skulle tallet "16".. at jeg så bare kan skrive: $foo[10][2] ? Syns jeg er ude i noget forfærdeligt array-arbejde.. hehe
29. august 2011 - 14:15
#13
hvis du bruger en af de løsninger der er post her, burde du ikke have en streng der indeholder kommaer - eller misforstår jeg noget?
29. august 2011 - 14:19
#14
Måske jeg skulle forklare mig bedre.. :) Strengen: "8045,1314568800,16,6,18,83;8045,1314568800,16,6,18,83" Nu er den bare kopieret... Den er først ";" separeret ... derefter "," separeret... Har fundet en løsning, men så ender jeg i en array der slutter på $foo[1721]; - og det er med: $p = preg_split('/[,;]/', $data, NULL, PREG_SPLIT_NO_EMPTY); Først skal den separeres med ";" og herefter "," således jeg kan smide skidtet i en DB;
29. august 2011 - 14:20
#15
Grunden til dette er at for hvert ";" separering er én log... Hver "," er data fra hver log
29. august 2011 - 14:29
#16
og når du bruger preg_split, bliver det "rodet" sammen i ét stort array... ville det så ikke være bedre at splitte på ; først og når de skal i databasen, splitter du på , ?
29. august 2011 - 14:34
#17
Nu er vi på bølgelængde... Du kan nok fornemme jeg ikke har arbejdet skide meget med arrays. (Har før brugt tusindvis af variabler hvor arrayes kunne gøre det) Hvis vi nu antager jeg henter "dataene" direkte fra en fil. Planen er at de skal direkte i en DB; Ville du så explode først, og måske preg_split herefter? Jeg kan ikke putte flere tegn eller andet ind i strengen, da den bliver sendt fra en PLC der bliver afregnet pr. MB. Jeg kan simpelthen ikke lure en smart måde at gøre det på, uden at få for mange steder der kan opstå fejl.
29. august 2011 - 14:44
#18
hvis du nøjes med at splitte på ; er det vel fint nok - når du skal smide i databasen skal du alligevel dele værdierne med komma? INSERT INTO tabel(felt1, felt2, felt3) VALUES(værdi1, værdi2, værdi3)
29. august 2011 - 14:58
#19
Nooo.... Nu skal du jo ikke skrive noget jeg burde vide.. :'( $data = noget fra fopen.... $p = explode(";",$data); INSERT INTO bla VALUES($p); ? Men nu skal jeg jo stadig blande en while ind i det, for at få alle 287 logs ind ? $i = 0; while($i <= 287){ INSERT INTO bla VALUES($p[$i]); $i++; } ??
29. august 2011 - 15:03
#20
Heh... Det her burde koste så mange flere point... Hvis nu filen fx på et tidspunkt har 287 logs... og andre gange 1024 logs... Kan jeg så lave sådan at scriptet selv kan finde ud af det, uden at jeg skal have min while() til at tælle op til fx. 287 ?
29. august 2011 - 15:20
#21
du kan jo bruge
count() på dit array og bruge resultatet af denne i stedet for 287 / 1024 :)
29. august 2011 - 21:26
#22
Hvorfor får count et andet resultat end det antal arrays der er? (2 stk i forskel)
29. august 2011 - 21:33
#23
kunne man forestille sig at der er nogle med tomme strenge i eller noget - hvis følgende virker, er den go nok:
print_r($array(count($array -1)));
29. august 2011 - 21:36
#24
huh? ik forstået
29. august 2011 - 22:33
#25
hvordan kommer du frem til at count tæller forkert?
Kurser inden for grundlæggende programmering