Avatar billede stigma Nybegynder
20. september 2010 - 23:18 Der er 8 kommentarer og
2 løsninger

Dele streng op i 3 dele

Hej, jeg har lige fundet mig en magnet kort læser, når jeg køre den igennem får jeg følgende output:

%CHRISTIANSEN-JEPPE-HUNDEBØL+++++++ PORSHOLTPARKEN-27+++++++++++++++++ 561-6740_ æ92081004-280789-****-1042110083561010109_

Jeg vil således gerne have et php script til at at dele strengen op i 3 stykker (Gerne array), hvor de bliver delt op hvor antallet af +'er er større end 2, så det evt. kunne se således ud:

Array (
  [0] => "%CHRISTIANSEN-JEPPE-HUNDEBØL",
  [1] => "PORSHOLTPARKEN-27",
  [2] => "561-****_ æ92081004-280789-****-1042110083561010109_"
)
Avatar billede intenz Novice
21. september 2010 - 00:04 #1
Man kan lave det smartere end det her, men en hurtig løsning kunne være:


$str = "%CHRISTIANSEN-JEPPE-HUNDEBØL+++++++ PORSHOLTPARKEN-27+++++++++++++++++ 561-6740_ æ92081004-280789-****-1042110083561010109_";

$tempDataArray = explode("++", $str);
$dataArray = array();
foreach($tempDataArray AS $key => $value) {
  $dataArray[$key] = str_replace("+", "", $value);
}

var_dump($dataArray); // arrayet ligger i $dataArray

Avatar billede stigma Nybegynder
21. september 2010 - 08:39 #2
Okay - men dette giver kun et array med en værdi i. Jeg havde forestillet mig at man kunne dele det som jeg også nævnte tidligere, altså op i 3 strings..
Avatar billede repox Seniormester
21. september 2010 - 09:54 #3
#2
Det er ikke korrekt at ovenstående script kun giver en array-værdi - jeg får faktisk 12 ud af ovenstående.

Dog mener jeg at kunne udlæse af strengen at opdeleren er et whitespace, hvorfor du nødvendig må have fire værdier. Jeg antager altså at det er et sygesikringsbevis du kører igennem kortlæseren.

Ved at opdele med whitespace får du disse værdier:
array(4) 
{
  [0]=> string(35) "%CHRISTIANSEN-JEPPE-HUNDEBØL+++++++"
  [1]=> string(34) "PORSHOLTPARKEN-27+++++++++++++++++"
  [2]=> string(9) "561-6740_"
  [3]=> string(42) "æ92081004-280789-****-1042110083561010109_"
}


Der har du altså [0]navn, [1]adresse, [2}kommunenummer og postnummer samt [3] personfølsomme data.

Så den nemme måde at gøre det er faktisk bare at skrive:
<?php
  ...
  $data = explode(" ", $streng);
  var_dump($data);
?>
Avatar billede stigma Nybegynder
21. september 2010 - 10:05 #4
Okay, men nu kommer jeg da lige i tanke om at jeg glemmer helt at selv at have redigeret i det output der, det som den reelt outputter ser således ud:

%CHRISTIANSEN&JEPPE HUNDEB'L      PORSHOLTPARKEN 27                5616740_
æ92081004280789****1042110083561010109_

Havde helt glemt at oplyse, at hvor der var flere en et mellemrum havde jeg sat et plus i stedet, for at kunne se hvordan det ændrede sig fra sygesikringskort til sygesikringskort. Men overstående er det der outputter, så snart man køre den igennem.
Avatar billede repox Seniormester
21. september 2010 - 10:13 #5
Det ændrer ikke på at din opdeler er et whitespace.
Du har jo også ændret væsentligt i dataene, hvorfor det heller ikke kan forventes at dine resultater fungerer efter hensigten.

Nu må du jo så svare på om det er korrekt opfattet at inputtet er opdelt i to linier?
Avatar billede stigma Nybegynder
21. september 2010 - 11:39 #6
Okay men har fundet ud af det nu, jeg sletter bare alle de tomme felter med det her:

if (!empty($_POST)) {
                $data = explode("  ", $_POST['magnet']);
                for ($i = 0; $i<=count($data); $i++) {
                    if (!empty($data[$i])) {
                        $sskData[] = $data[$i];
                    }
                }
                echo "<pre>";
                print_r($sskData);
                echo "</pre>";
            }
Det giver det ønskede resultat, men rep0x smid lige et svar så du også kan få del i pointsne :)
Avatar billede repox Seniormester
21. september 2010 - 11:43 #7
array_filter() kunne have sparet dig fire linier istedet for at iterere hen over arrayet.
Avatar billede stigma Nybegynder
21. september 2010 - 12:09 #8
Men hvad så med keys'ne, kan man få dem til at komme i numerisk rækkefølge igen så?
Avatar billede repox Seniormester
21. september 2010 - 12:55 #9
Nej, kun hvis du bruger sort() på dit array bagefter.
Men du kender jo i forvejen rækkefølgen på dine data, så det må være et bekvemmelighedsproblem.
Avatar billede stigma Nybegynder
21. september 2010 - 12:59 #10
Okay, men tusinde tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester