Vinnaren i pepparkakshustävlingen!
2017-08-16, 13:29
  #1
Medlem
Caffos avatar
Kanske lite dumt formulerad rubrik.

Jag behöver förvandla en sträng till en däckdimension. Min kod undertill fungerar som den ska, men det känns som det måste finnas ett "snyggare/bättre" sätt att gå tillväga?

För er som inte orkar köra scriptet, eller redan innantill kan se vad den gör, så ändrar den t.ex "1956515" till 195/65-15

Kod:
$dim = array('1956515''2055516''2254517''2354018');
    for(
$i 0$i count($dim); $i++){
    echo 
substr($dim[$i], 03)."/".substr($dim[$i], 32)."-".substr($dim[$i], 52)."<br />";
    } 

Tack på förhand!
Citera
2017-08-16, 14:00
  #2
Medlem
På vilket sätt är du missnöjd med det där? Jag hade inte brytt mig om att skriva om det om det inte fanns något skäl till det.
Citera
2017-08-16, 14:36
  #3
Medlem
Caffos avatar
Citat:
Ursprungligen postat av RulleRivare
På vilket sätt är du missnöjd med det där? Jag hade inte brytt mig om att skriva om det om det inte fanns något skäl till det.

Det handlar väl främst om att utvecklas, och att få till en snyggare kod. I Detta fallet handlar det om dimensioner. Men jag kan tänka mig att (om) det finns ett smidigare alternativ, så kanske det funkar för att lätt ändra t.ex telefonnummer också..

08123456 > 08 - 12 34 56
0707987654 > 070 - 798 76 54 / 0707 - 98 76 54
Citera
2017-08-16, 14:41
  #4
Medlem
Lenge siden jeg har hvert borte i PHP(versjon 4).

Men med 2x substr_replace kan du jo bygge opp en string til en dekk dimensjon. Samtidig kunne det jo ha hvert greit å brukt multidimensjonale arrays hvis du trenger å sortere osv.
Citera
2017-08-16, 16:09
  #5
Medlem
Citat:
Ursprungligen postat av Caffo
Jag behöver förvandla en sträng till en däckdimension. Min kod undertill fungerar som den ska, men det känns som det måste finnas ett "snyggare/bättre" sätt att gå tillväga?

Det är absolut inget fel på ditt sätt för en så liten uppgift.

Personligen tycker jag det blir renare och enklare att läsa med hjälp av foreach istället för en for-loop.

substr_replace passar bra för att sätta in tecken vid specifika platser så slipper du konkatenera strängelement och ha dig, förutom vid avslutande <br> (skriver du XHTML? <br> som gäller igen annars...)

Kod:
$dim = array('1956515''2055516''2254517''2354018');

foreach(
$dim as $daeck) {
    echo 
substr_replace(substr_replace($daeck'-'50), '/'30) . "<br>";


För ditt exempel med telefonnummer hade jag skippat att sätta in bindestreck; problemet är att olika prefix har olika längd och betydelse. Gamla Stockholm (08) är bara två tecken medan resten av Sverige är tre eller fyra tecken, så du får matcha beroende på fall. Förr i tiden var mobilnummerprefixen fyra siffror men de är nu tre, och i både fasta och mobila nummer kan man flytta nummer mellan olika operatörer och städer så behovet av prefix-åtskillnad är i princip borta, annat än kanske för att avgöra var ett telefonnummer 'förmodligen' hör hemma geografiskt eller att det är ett mobilnummer.
...och medan jag har ännu att stöta på det ska man inte utgå från att andra programvaror gillar ett telefonnummer som innehåller bindestreck/icke-siffror. Själv tar jag bort eventuella mellanslag, bindestreck och inledande nollor och sätter dit landsprefix om numret antas användas internationellt eller behåller telefonnumrets inledande nolla om det är svenska uppgifter. På så sätt ser ditt data konsekvent likadant ut där du sparar det och när du visar det.
Citera
2017-08-18, 00:49
  #6
Medlem
Tvillingens avatar
Lite alternativ

Kod:
<?php
$dimensions 
= array('1956515''2055516''2254517''2354018');
foreach(
$dimensions as $dim) {        
        echo 
preg_replace(
                
'/^(\d{3})(\d){2}(\d){2}$/',
                
'${1}/${2}-${3}',
                
$dim
        
);
}

Kod:
<?php
$dimensions 
= array('1956515''2055516''2254517''2354018');
foreach(
$dimensions as $dim) {        
        
printf('%d/%d-%d',
                
substr($dim03),
                
substr($dim32),
                
substr($dim52)
        );
}
Citera
2017-08-21, 13:27
  #7
Medlem
Håller med om vad andra sagt, ser inte att den enkla varianten skulle vara fel här. Visst, man kan skina och skriva generella funktioner med callbacks, men jag är inte säker på att jag skulle göra koden så. Om det kommer in nåt slags listor med rådata så skulle jag bara bryta upp rådatat i dom komponenter som ska finnas innan jag stoppar in det i databasen. Sen låter jag databasen göra siffertuggandet, sortering och vad det nu kan vara, den gör det så mycket bättre. Om det inte finns nåt udda krav på att en databas inte ska användas, eller nåt.

Poängen med det där antar jag var att man lägger krutet där det behövs på riktigt, och det tror jag inte är vid just en sån där import. KISS, helt enkelt..
Citera
2018-03-09, 14:02
  #8
Medlem
Caffos avatar
Tack för alla svar jag glömde av att jag postade detta.. Sorry

Har läst lite om regex på sista tiden och kände att det var det som passade mig bäst

Kod:
$tyres "continental 2055516 dubb";

$dim preg_replace('/(\d{3})(\d{2})(\d{2})/''\1/\2-\3'$tyres); 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback