[php] Array waarde returnen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
Ik heb de volgende functie gemaakt, om de datum die in een database opgeslagen is, in de vorm 2007-01-31 (Y-m-d), om te zetten naar een string, dus 31 Januari 2007 bijvoorbeeld.
Zo ziet de functie er uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function dateToNormal($ymd,$display)    {
    $monthdates = array(
    01 => 'january',
    02 => 'february',
    03 => 'march',
    04 => 'april',
    05 => 'may',
    06 => 'june',
    07 => 'july',
    08 => 'august',
    09 => 'september',
    10 => 'october',
    11 => 'november',
    12 => 'december'
    );
    $articledate = explode("-",$ymd);
    $selectedmonth = substr($ymd,5,2); 
        if ($display == 1) {
        // January 1, 2007
            return $monthdates[$articledate[1]].' '.$articledate[2].', '.$articledate[0];
        } elseif ($display == 2) {
        // 1 january 2007
            return $articledate[2].' '.$monthdates[01].' '.$articledate[0];
        }
}

dateToNormal($article['date'],1);
// Dit geeft: 31, 2007. Dus niet january 31, 2007
?>

Het probleem zit hem in het parsen van de (textuele) maand. Ik heb dus eerst de array $monthdates aangemaakt, die een numerieke maand naar een textuele maand omzet.
Vervolgens neem ik de de $ymd datum variabele die met de functie meekomt, en explode ik die in de array $articledate. Zo is $articledate[1] de numerieke maand.
Mijn idee was dus, dat als je $monthdates[$articledate[1]] doet, je de textuele maand krijgt, maar dat werkt niet... Het werkt wel als je gewoon $monthdates[01] doet (dan krijg je dus januari)....
Kan dit niet, zoals ik het probeer te doen, of is er een andere reden / oplossing voor dit probleem?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Waarom het wiel opnieuw uitvinden?
date functie in php

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Niet om het een of ander, maar voldoet strftime() niet? Of kan deze niet met dat formaat omgaan?

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Waarom heb je überhaupt zo'n array met maanden aangemaakt als daar binnen php hele goeie functies voor zijn?

De oplossing van je probleem zit hem trouwens in het feit dat je 01 en 02 etc gebruikt als array keys. Waarschijnlijk werkt het wel als je daar netjes quotejes om je array keys zet zodat ie niet zal proberen dit te parsen als een integer/octal/weet ik veel :)

[ Voor 54% gewijzigd door SchizoDuckie op 18-06-2007 16:18 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Daarnaast 01 is niet hetzelfde als "01" en bestaat 09 helemaal niet (zie waarschuwing)..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
SchizoDuckie schreef op maandag 18 juni 2007 @ 16:17:
Waarom heb je überhaupt zo'n array met maanden aangemaakt als daar binnen php hele goeie functies voor zijn?

De oplossing van je probleem zit hem trouwens in het feit dat je 01 en 02 etc gebruikt als array keys. Waarschijnlijk werkt het wel als je daar netjes quotejes om je array keys zet zodat ie niet zal proberen dit te parsen als een integer/octal/weet ik veel :)
Omdat ik die functies dan nog niet goed ken ;)
Kunnen jullie me dan een beetje op weg helpen ermee? Ik heb gekeken naar strftime(), wat er opzich ideaal uitziet, maar ik weet niet hoe het mogelijk is om een gegeven datumstring om te laten zetten, en in welk formaat deze moet zijn... Uitleg erbij is niet erg duidelijk..
Of zijn er andere functies die ik zou kunnen gebruiken?

@Zwippie: Ik wil de datum in het [date] formaat in de database opslaan, zodat ik eventueel ook op datum kan sorteren. Daarna wil ik het een beetje netjes weergeven op de website, in plaats van in het Y-m-d formaat...

Iemand?..

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
SchizoDuckie schreef op maandag 18 juni 2007 @ 16:17:
De oplossing van je probleem zit hem trouwens in het feit dat je 01 en 02 etc gebruikt als array keys. Waarschijnlijk werkt het wel als je daar netjes quotejes om je array keys zet zodat ie niet zal proberen dit te parsen als een integer/octal/weet ik veel :)
Een integer welke met 0 begint wordt gezien als octale waarde. De keys 08 en 09 vragen daarmee dan ook om problemen.

Los van of je uberhaupt zelf opnieuw het wiel wil uitvinden is de volgende code imo veel duidelijker:
PHP:
17
    list($year, $month, $day) = explode('-', $ymd);

Dan heb je in de rest van de code duidelijkere variabelenamen ipv de $articledate array waarvan je moet onthouden waar element voor staat.
cbernardini schreef op maandag 18 juni 2007 @ 16:22:
Kunnen jullie me dan een beetje op weg helpen ermee? Ik heb gekeken naar strftime(), wat er opzich ideaal uitziet, maar ik weet niet hoe het mogelijk is om een gegeven datumstring om te laten zetten, en in welk formaat deze moet zijn... Uitleg erbij is niet erg duidelijk..
Ik vind de uitleg bij de date/time functions zo slecht nog niet, ik denk dat je het niet al na 6 minuten moet opgeven. ;) :>

[ Voor 23% gewijzigd door Voutloos op 18-06-2007 16:27 ]

{signature}


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op maandag 18 juni 2007 @ 16:20:
Daarnaast 01 is niet hetzelfde als "01" en bestaat 09 helemaal niet (zie waarschuwing)..
08 wel dan? :+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Je kunt hem op 2 manieren opslaan, als datetime of als integer (unix timestamp).
Beiden zijn te sorteren en afhankelijk van hoevaak je moet converteren kan je er een kiezen.

Als je dat besloten hebt kan je met strtotime en date alles doen wat je wilt.
Het staat erg goed uitgelegd, van een tweaker verwachten we dan ook dat hij er zelf uit komt.
Als je tegen echte problemen aanloopt kan je natuurlijk altijd vragen.
Succes. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Overigens een topic dat hier heel erg op lijkt: [PHP] Datum functie geeft rare uitkomst * incl. dezelfde fout mbt het wiel opnieuw uitvinden en het niet weten dat integers beginnend met 0 octaal geschreven zijn. ;)
Gelukkig viel het woord 'octaal' wel eerder in dit topic. In dat andere topic mocht ik ermee aankomen nadat >10 mensen het niet opgemerkt hadden. O-)

{signature}

Pagina: 1