/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problem med arrays...
Fra : Dennis Munding


Dato : 11-06-10 12:28

Hej NG,


Jeg har stirret mig blind på et problem - koden det drejer sig om:

$hol_start = '';
$hol_end = '';
$hol_check = date("$i/n/Y"); <!-- $i bliver defineret tidl. i scriptet.
Ingen problem i det!

$cur_year = date("Y");
$hol_dates = array("14/6/$cur_year", "20/6/2010");
$hol_events = array("Flag Day", "Fathers Day");

if(in_array($hol_check, $hol_dates)) {
$class = "test";
$hol_title = ??; <--- HER ER PROBLEMET!!
$hol_start = "<acronym class='" . $class . "' title='" . $hol_title . "'>";
$hol_end = "</acronym>";
}

echo "<td align='center' class='" . $class . "'>" . $link_start . $hol_start
.. $i . $hol_end . $link_end . "</td>";


Ovenstående kode markerer de rigtige datoer, men jeg ved ikke, hvordan jeg
får vist $hol_title...?

Har forsøgt at lægge de arrays sammen til et:
$hol_dates = array("14/6/$cur_year" => "Flag Day", "20/6/2010" => "Fathers
Day");

Men kan ikke gennemskue (nok fordi mit hovede er fyldt med vigtigere
problemer) hvordan jeg laver udtrækket så datoer og informationer hænger
sammen.

Forsøgte med en foreach løkke, men det gik i ged...


Et spark i den rigtige retning eller et relevant link (med god forklaring!)
ville blive modtaget med stor taknemmelighed.

Kalenderen som det hele handler om, kan ses her - med markering på datoerne
(rød skrift), men uden visning af $hol_title:
http://pgsquad.com/main.php?page=test - Det er den store kalender...


Med venlig hilsen
--
Dennis Munding
a.k.a. The Eye - Member of the PosseGrim Squad
http://pgsquad.com/
"When you hear the wind - you're already dead..."


 
 
Birger Sørensen (11-06-2010)
Kommentar
Fra : Birger Sørensen


Dato : 11-06-10 14:06

Dennis Munding kom med følgende:
> Hej NG,
>
>
> Jeg har stirret mig blind på et problem - koden det drejer sig om:
>
> $hol_start = '';
> $hol_end = '';
> $hol_check = date("$i/n/Y"); <!-- $i bliver defineret tidl. i scriptet. Ingen
> problem i det!
>
> $cur_year = date("Y");
> $hol_dates = array("14/6/$cur_year", "20/6/2010");
> $hol_events = array("Flag Day", "Fathers Day");
>
> if(in_array($hol_check, $hol_dates)) {
> $class = "test";
> $hol_title = ??; <--- HER ER PROBLEMET!!
> $hol_start = "<acronym class='" . $class . "' title='" . $hol_title . "'>";
> $hol_end = "</acronym>";
> }
>
> echo "<td align='center' class='" . $class . "'>" . $link_start . $hol_start
> . $i . $hol_end . $link_end . "</td>";
>
>
> Ovenstående kode markerer de rigtige datoer, men jeg ved ikke, hvordan jeg
> får vist $hol_title...?
>
> Har forsøgt at lægge de arrays sammen til et:
> $hol_dates = array("14/6/$cur_year" => "Flag Day", "20/6/2010" => "Fathers
> Day");
>
> Men kan ikke gennemskue (nok fordi mit hovede er fyldt med vigtigere
> problemer) hvordan jeg laver udtrækket så datoer og informationer hænger
> sammen.
>
> Forsøgte med en foreach løkke, men det gik i ged...
>
>
> Et spark i den rigtige retning eller et relevant link (med god forklaring!)
> ville blive modtaget med stor taknemmelighed.
>
> Kalenderen som det hele handler om, kan ses her - med markering på datoerne
> (rød skrift), men uden visning af $hol_title:
> http://pgsquad.com/main.php?page=test - Det er den store kalender...
>
>
> Med venlig hilsen

Det må være det rigtige at indeksere efter datoen...
$hol_dates = array(
"14/6/$cur_year" => "Flag Day",
"20/6/2010" => "Fathers Day"
);
if( array_key_exists($hol_check, $hol_dates)) {
$class = "test";
$hol_title = $hol_dates[ $hol_check]; <--- HER ER PROBLEMET!!
$hol_start = "<acronym class='" . $class . "' title='" . $hol_title .
"'>";
$hol_end = "</acronym>";
}

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin (15-06-2010)
Kommentar
Fra : Martin


Dato : 15-06-10 15:12

On 11-06-2010 13:28, Dennis Munding wrote:
> Hej NG,
>
>
> Jeg har stirret mig blind på et problem - koden det drejer sig om:
>
> $hol_start = '';
> $hol_end = '';
> $hol_check = date("$i/n/Y"); <!-- $i bliver defineret tidl. i scriptet.
> Ingen problem i det!
>
> $cur_year = date("Y");
> $hol_dates = array("14/6/$cur_year", "20/6/2010");
> $hol_events = array("Flag Day", "Fathers Day");
>
> if(in_array($hol_check, $hol_dates)) {
> $class = "test";
> $hol_title = ??; <--- HER ER PROBLEMET!!
> $hol_start = "<acronym class='" . $class . "' title='" . $hol_title . "'>";
> $hol_end = "</acronym>";
> }

Et 2D array ville være smart at bruge

Kunne fx. se således ud

Vi smider det ind i en funktion, for overskulighedens skyld

function getDays($day, $month, $year, array $dates) {

$outputDays = array();
foreach($dates AS $name => $day)
{
if (isset($day['month']) && $day['month'] != $month) {
continue;
// continue er faktisk lidt misforstået imo
// da det faktisk betyder at den skal starte
// med næste loop i foreach'en - lidt ala "break and continue"
}

if (isset($day['year']) && $day['year'] != $year) {
continue;
}

// nu er både måned og år rigtige - så nu kan vi tjekke på dag

if ($day['day'] == $day) {
// Whieee dagen er også korrekt :)
// Så vi smider den i et array,
// så vi kan have flere dage på samme dato
$outputDays[] = $name;
}
}
return $outputDays;

}


Sådan her kan funktionen kaldes

$dates = array(
'flag dag' => array('day' => 28, 'month' => 10),
'løn dag' => array('day' => 28),
'min 30 års fødselsdag' => array('day' => 14, 'month' => 5, 'year' =>
2010)
);
// Først laver vi lige de forskellige datoer som vi gerne vil have

Så kalder vi funktionen
$days = getDays(date('d'), date('m'), date('Y'), $dates);

Nu har vi et array med navn(e) eller bare et tomt array, den kan så
løkkes eller bare udskrives med implode

fx.
echo implode('<br />', $days);

> Et spark i den rigtige retning eller et relevant link (med god
> forklaring!) ville blive modtaget med stor taknemmelighed.

Desuden så kan jeg klart anbefale at kigge på PEAR pakken
Date_Holidays_Danish, så behøver man heller ikke begynde på den
umenneskelige udregning af påsken :)
http://pear.php.net/package/Date_Holidays_Denmark

Så er det sådan set bare at skrive

$driver = &Date_Holidays::factory('denmark', date('Y), 'da_DK');

$dstr = '2010-06-15';
$workday = new Date($dstr);
if ($driver->isHoliday($workday)){
echo "{$dstr} is a holiday\n";
}

Så kan man også tilføje sine egne datoer via

$this->_addHoliday('newYearsEve',
$this->_year . '-12-31',
'New Year\'s Eve');
$this->_addTranslationForHoliday('newYearsEve', 'da_DK', 'Nytårsaften');

direkte i driveren, eller man kan lave sin egen driver - som så kan
hente datoerne fra database eller lign.

>
> Kalenderen som det hele handler om, kan ses her - med markering på
> datoerne (rød skrift), men uden visning af $hol_title:
> http://pgsquad.com/main.php?page=test - Det er den store kalender...

Som kalender der også kan bruges sammen med Date_Holidays kunne fx. være
http://pear.php.net/package/Calendar

Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407948
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste