Avatar billede NielsErikP Mester
16. april 2013 - 13:22 Der er 31 kommentarer og
1 løsning

Returnering af aktuelle Index.

Hej..

Givet følgende array :

$month_engl_array = array ('jan','feb','mar','apr','may','jun','jul','aug','sep','okt','nov','dec');


Kan jeg ikke lige se, hvordan jeg får variablen :

$month = 'apr'


Til at returnere index 3.

Håber der er en med lidt hjælp her.

På forhånd tak.
16. april 2013 - 13:47 #1
$month_engl_array = array ('jan','feb','mar','apr','may','jun','jul','aug','sep','okt','nov','dec');
$month = 'apr';
$key = array_search($month, $month_engl_array);
echo $key;
Avatar billede Fnugus Nybegynder
16. april 2013 - 13:53 #2
$month_engl_array = array ('jan','feb','mar','apr','may','jun','jul','aug','sep','okt','nov','dec');
$flip = array_flip($month_engl_array);
echo $flip['apr'];

// Antaget at $month_engl_array[3] = 'apr'; vil
// $flip['apr'] = 3;
Avatar billede NielsErikP Mester
16. april 2013 - 13:57 #3
Hej...

Tak for dit indlæg, Chrstian_Belgien.

Arbejdede videre selv, mens jeg ventede på indlæg og fandt på følgende (opret ny array):

$month_engl_index = array('jan' => 0,'feb' => 1,'mar' => 2,'apr' => 3,'may' => 4,'jun' => 5,'jul' => 6,'aug' => 7,'sep' => 8,'okt' => 9,'nov' => 10,'dec' => 11);


Og så følgende :

echo $month_engl_index[$month];


Men dit er nok mere php korrekt, Så jeg siger tak for hjælpen og giver dig point.
Avatar billede NielsErikP Mester
16. april 2013 - 14:00 #4
Hej..

Fnugus..Du skulle ikke have haft point.:-( :-(
De var til Christian..
Christianjeg opretter lige et point spørgsmål som tak for hjælpen.
Fnugus din tyv :-)
Avatar billede olebole Juniormester
16. april 2013 - 14:04 #5
<ole>

Hvad skal du bruge det til, og bruger du $month_engl_array til andet?

Hvis du ikke har nogen speciel grund til at struktureret dit array som i spørgsmålet, er din løsning i #3 klart bedre.

Du ville også kunne bruge [url=http://dk1.php.net/manual/en/function.in-array.php]in_array[/b], men den er heller ikke særlig effektiv. #3 er stadig den bedste  =)

/mvh
</bole>
Avatar billede olebole Juniormester
16. april 2013 - 14:06 #6
Ups ... forkert slut-tag! Der skulle stå: in_array
Avatar billede NielsErikP Mester
16. april 2013 - 14:16 #7
Hej ole...

Jamen jeg bruger $month_engl_array til noget andet, men jeg havde brug for at få Index'et til andet brug. Så jeg oprettede spørgsmålet da min gamle knark af en hjerne ikke lige kunne frembringe en løsning før jeg havde ramt "opret".. Så kom ideen selvfølgelig.
Mem jeg tror også jeg bruger egen løsning i #3 .
Avatar billede olebole Juniormester
16. april 2013 - 14:49 #8
Det lyder fornuftigt. Hvad er det i øvrigt for månedsnavne - engelske eller danske? Jeg undrer mig bare over may og okt, hvor 'y' og 'k' peger i hver sin retning  *o)
Avatar billede NielsErikP Mester
16. april 2013 - 21:06 #9
Hej..

"BINGO".. Du har squ ret, ole.. Jeg har en stavefejl.. Det hedder oct og array'et er shorthand på engelske måneds navne.
Avatar billede olebole Juniormester
16. april 2013 - 21:36 #10
'Gamle Ole' og 'Bingo' hører jo sammen som 'ping' og 'pong', 'yin' og 'yan', 'Lilholt' og 'kedsomhed', etc  *o)
Avatar billede NielsErikP Mester
16. april 2013 - 22:08 #11
Hej..

He.. he..

Undrer mig om Fnugus er over alle bjerge med "Guldet" .. Den gamle landevejs røver :-)
Avatar billede NielsErikP Mester
16. april 2013 - 23:22 #12
Hej...

Ole, hvis du ser med stadig.. Kan du så ikke svare på, hvordan det kan være strtotime("$date $month $year") Fungere, men strtotime($date $month_engl_index[$month] $year") giver 01-01-1970 ??
Avatar billede olebole Juniormester
17. april 2013 - 01:01 #13
strtotime("3 oct 2012")

- er en valid datostreng. Det gælder ikke:

strtotime("3 9 2012")
Avatar billede arne_v Ekspert
17. april 2013 - 04:04 #14
Min anbefaling vil vaere at fjerne brugen af det array.

Du kan nemt faa et maaneds navn fra et maaned nummer.

Og du kan ogsaa faa maaned nummer fra et maaned navn.

<?php
$month = 'apr';
$tm = date_parse_from_format('M', $month);
$monthix = $tm['month'];
echo $monthix;
?>
           
(bemaerk at der her returneres 1-12 ikke 0-11)
Avatar billede NielsErikP Mester
17. april 2013 - 21:46 #15
Hej ole...

Endnu engang tak for din forklaring, ved ikke hvorfor den ikke ville.. Det jeg havde brug for... Var da jeg angiver $month som "apr" at få nummeret på den, for der efter igen at konvertere den til "apr" med følgende $month_engl_array[$month_engl_index[$month] +1 ]  
Sådan at jeg netop kunne tælle den op/ned.

@arne_v:  Hvad skyldes anbefalingen.. Er det noget ressource mæssigt??
Men tak for dit indlæg. Kigger da lige på den funktion der.
Avatar billede olebole Juniormester
17. april 2013 - 22:26 #16
Selvtak. Arnes forslag giver afgjort en enklere kode. En native funktion afvikler uden tvivl 'væsentligt' hurtigere - men det er næppe væsentligt ved få kald til den  =)

Man lærer en masse ved at skrive funktioner selv, men når der findes indbyggede alternativer, bør man bruge dem i produktionskode
Avatar billede NielsErikP Mester
17. april 2013 - 22:58 #17
Hej..
Ja..Det er jo netop det der er min filosofi.. At skal man have tingene gjort må man gøre dem selv. Nej, nu kommer jeg nok ikke i produktions øjemed. Arbejder på hobbyplan. Så det går nok.

Og.. ja man lærer mere ved at skrive selv...Og så kan du vel også give mig ret i man på sigt slipper for "Deprecated" .
Avatar billede arne_v Ekspert
18. april 2013 - 01:41 #18
Den primaere grund til mit forslag er at goere det nemmere at internationalisere.

setlocale(LC_TIME, 'danish_Denmark');

virker ikke hvis man har et stort antal hardcoded maanedsnavne rundt omkring i koden.
Avatar billede olebole Juniormester
18. april 2013 - 01:49 #19
Arne, til gengæld er det vist ikke sjældent med udbydere, som ikke installerer de forskellige locals
Avatar billede arne_v Ekspert
18. april 2013 - 02:31 #20
Muligt. Men jeg ville alligevel ikke lave I18N vanskelig kode.
Avatar billede olebole Juniormester
18. april 2013 - 13:54 #21
Det forstod jeg så ikke lige  =)
Avatar billede arne_v Ekspert
18. april 2013 - 14:59 #22
Jeg ville ikke skrive kode som jeg mener er daarlig, fordi mange web hoteller ikke installerer det de burde.
Avatar billede olebole Juniormester
18. april 2013 - 15:19 #23
Principielt er jeg enig, men finder det måske lidt bombastisk i den givne situation  =)

1) Man har jo altid valget at sige nej til en opgave, hvis man mener, det vil kræve dårlig kode (= kode, som er usikker eller medfører unødig brug af ressourcer i målbare mængder).

2) Nu er der vel hverken tale om kode, som er usikker - eller som bruger unødige ressourcer i væsentlig (målelig) grad.

Til gengæld er der tale om ikke særlig vedligeholdelsesvenlig kode - hvilket altid er problematisk. På den anden side, må bør man nok også være lidt realistisk, og tidligere tråde tyder på, det faktisk er ret mange udbydere (naturligvis specielt de meget billige), som ikke understøtter locals.

Vi er nogle, som ikke behøver beskæftige os med den slags udbydere, men vi er nok et ret lille fåtal på et site som Eksperten. Virkeligheden for de fleste ser nok lidt anderledes ud  *o)
Avatar billede NielsErikP Mester
18. april 2013 - 21:16 #24
Hej..

Ja..Nu kan jeg se de "Point Mæssige "- Kloge, får sig en lille diskution.

@arne_v: Jeg vil selvfølgelig kigge på dine kode forslag. Men "For Satan" , Hvor vil jeg gerne selv lave koden. Og er Ny i faget. Så måske, når jeg bliver klogere..Så bruger jeg bare den kode andre har lavet.

@olebole: "2) Nu er der vel hverken tale om kode, som er usikker - eller som bruger unødige ressourcer i væsentlig (målelig) grad.
"
.... Og hvordan måler man så det??
Avatar billede arne_v Ekspert
19. april 2013 - 02:24 #25
Paa mange maader er jeg mere bekymret for den her slags end for daarlig performance.

Daarlig performance er ret synlig og medmindre problemet er startet allerede i arkitekturen saa kan det typisk rettes et enkelt sted eller nogle faa steder.

Hvis man skal igang med at i18n'e et presentation layer og det viser sig at business logic layer har en masse kode som ikke er i18n venlig, saa kan man have et stort problem. Det kan vaere meget svaert at finde alle problemerne ved test. Og der skal maaske rettes i rigtig meget kode.
Avatar billede arne_v Ekspert
19. april 2013 - 02:28 #26
Og det har ikke noget med indbygget funktionalitet vs egen kode at goere. Jeg tror ikke at forskellen i antal linier der skal skrives er stor.

Men hvis man konverterer navn->nummer for input og nummer->navn i output i presentation layer, saa er man langt bedre rustet til at haandtere internationalisering, forkortelser vs fulde navne, nummer vs navn.
Avatar billede NielsErikP Mester
19. april 2013 - 21:15 #27
Hej...

Okay, man skal altså holde sig fra at skrive egen kode, og så bare "blindfolded" finde scripts på nettet.

Kun lige et lille spørgsmål mere fra en ny i faget, hvad er i18n for en størrelse??
Avatar billede arne_v Ekspert
19. april 2013 - 21:23 #28
i18n er en forkortelse for internationalization
Avatar billede arne_v Ekspert
19. april 2013 - 21:25 #29
generelt er det godt at genbruge eksisterende funktionalitet

men i det her tilfaelde er det ikke pointen, fordi ogsa den loesning jeg foreslaar kraever egen kode, men lidt anderledes kode og kode andre steder
Avatar billede NielsErikP Mester
19. april 2013 - 21:28 #30
Hej..

Tak, arne.

Jamen, jeg betvivler ikke dig eller din kode. Kigger så afgjort på dine eksempler.
Men du kender det jo nok godt, lysten til selv at ville lære noget :-)
Avatar billede olebole Juniormester
20. april 2013 - 14:36 #31
NielsErik, det er ikke 'enten eller'. Du kan sagtens lege med den slags funktioner i et isoleret miljø for at lære. Det er bare ikke hensigtsmæssigt at bruge på et site, der skal virke. Funktionaliteten ligger ikke det logiske sted og koden bliver svær at vedligeholde.

i18n er en forkortelse, dannet efter bedste 'gangstermønster' - ligesom AK81. 'i' og 'n' er første og sidste bogstav i ordet 'internationalization' - og der er 18 tegn imellem dem  =)
Avatar billede NielsErikP Mester
20. april 2013 - 21:56 #32
Hej...

Nej, okay. Og jeg leger videre. Men forholder mig selvfølgelig til det i siger.

Tak for forklaringen, ole :-)
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