skrypt imieninowy mający problem z przełomem miesiąca

skrypt imieninowy mający problem z przełomem miesiąca
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
1

witam,

używam skryptu imieninowego, ktory wygląda mnie więcej tak (fragment)

Kopiuj
<?php

$imieniny[1][5] = "Edwarda, Hanny, Szymona";
$imieniny[1][6] = "Kacpra, Melchiora, Baltazara";

$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

echo "".$imieniny[date("n",time())][date("j",time())];

?>

działa ok, chciałem go przerobić aby pobierał imieniny na dzień następny i przyciął się na przełomie miesiąca, wiem dlaczego, ale nie wiem jak to poprawić, aby się nie przycinał, jutro jak zacznie się luty pewnie będzie działał dobrze do przełomu miesiąca 🙁

Kopiuj
<?php

$imieniny[1][5] = "Edwarda, Hanny, Szymona";
$imieniny[1][6] = "Kacpra, Melchiora, Baltazara";

$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

echo "".$imieniny[date("n",time())][date("j",time())+1];

?>

jak to ogarnąć żeby się nie przycinał w ostatnim dniu miesiąca, co zmienić? - proszę o pomoc ;)

edytowany 2x, ostatnio: ikp-php3
Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
2

Problem polega na tym, że jeśli akurat jest 31 lipca (będący w tablicy $imieniny[7][31]), to po prostu zwiększenie dnia o 1 spróbuje odczytać pole $imieniny[7][32].

Widzę kilka sposobów:

  1. Przerób tablice tak żeby nie była rozróżniona na dni i miesiące, tylko zeby po prostu trzymała listę 365/366 dni, pierwszy stycznia w 0, drugi stycznia w 1, trzeci stycznia w 2, ..., trzydziesty styczna w 30, pierwszy lutego w 31, drugi lutego w 32. Wtedy nie ma problemu ze zwiększaniem dnia.
  2. Przerób kod zmiany dnia tak, żeby zmienił 7.31 nie na 7.32 tylko na 8.1. Można to zrobić na kilka sposobów.
Kopiuj
$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('m');
$tomorrowDay = $tomorrowDate->format('d');

echo $imieniny[$tomorrowMonth][$tomorrowDay];
edytowany 4x, ostatnio: Riddle
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0
Riddle napisał(a):

Problem polega na tym, że jeśli akurat jest 31 lipca (będący w tablicy $imieniny[7][31]), to po prostu zwiększenie dnia o 1 spróbuje odczytać pole $imieniny[7][32].

Widzę kilka sposobów:

  1. Przerób tablice tak żeby nie była rozróżniona na dni i miesiące, tylko zeby po prostu trzymała listę 365/366 dni, pierwszy stycznia w 0, drugi stycznia w 1, trzeci stycznia w 2, ..., trzydziesty styczna w 30, pierwszy lutego w 31, drugi lutego w 32. Wtedy nie ma problemu ze zwiększaniem dnia.
  2. Przerób kod zmiany dnia tak, żeby zmienił 7.31 nie na 7.32 tylko na 8.1. Można to zrobić na kilka sposobów.
Kopiuj
$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('m');
$tomorrowDay = $tomorrowDate->format('d');

echo $imieniny[$tomorrowMonth][$tomorrowDay];

w tej wersji zadziałało ;) - dziękuję za pomoc!!!!!

Kopiuj
$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if (isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
} else {
    echo "Jutro nie ma imienin. ;)";
}
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0
ikp-php3 napisał(a):
Riddle napisał(a):

Problem polega na tym, że jeśli akurat jest 31 lipca (będący w tablicy $imieniny[7][31]), to po prostu zwiększenie dnia o 1 spróbuje odczytać pole $imieniny[7][32].

Widzę kilka sposobów:

  1. Przerób tablice tak żeby nie była rozróżniona na dni i miesiące, tylko zeby po prostu trzymała listę 365/366 dni, pierwszy stycznia w 0, drugi stycznia w 1, trzeci stycznia w 2, ..., trzydziesty styczna w 30, pierwszy lutego w 31, drugi lutego w 32. Wtedy nie ma problemu ze zwiększaniem dnia.
  2. Przerób kod zmiany dnia tak, żeby zmienił 7.31 nie na 7.32 tylko na 8.1. Można to zrobić na kilka sposobów.
Kopiuj
$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('m');
$tomorrowDay = $tomorrowDate->format('d');

echo $imieniny[$tomorrowMonth][$tomorrowDay];

w tej wersji zadziałało ;) - dziękuję za pomoc!!!!!

Kopiuj
$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if (isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
} else {
    echo "Jutro nie ma imienin. ;)";
}

ten fragment sprawdzający czy są imieniny, jednak musi wyglądać inaczej 😉

Kopiuj
if (array_key_exists($tomorrowMonth, $imieniny)) {
    $imieninyJutro = $imieniny[$tomorrowMonth];
    if (array_key_exists($tomorrowDay, $imieninyJutro)) {
        $imieninyJutroValue = $imieninyJutro[$tomorrowDay];
        if ($imieninyJutroValue !== "") {
            echo $imieninyJutroValue;
        } else {
            echo "Jutro nie ma imienin.";
        }
    } else {
        echo "Jutro nie ma imienin.";
    }
} else {
    echo "Jutro nie ma imienin.";
}
Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
0

@ikp-php3 Rozważ wyniesienie tej części kodu do funkcji.

IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0
Riddle napisał(a):

@ikp-php3 Rozważ wyniesienie tej części kodu do funkcji.

za mało wiem o php - żeby za bardzo kombinować, ze zmianami zadziałało nawet jeżeli jest puste miejsce w tabeli to wyświetla komunikat o braku, - ostatn fragment oczywiście podmieniłem ;)

dziekuję jeszcze raz za pomoc, bez Ciebie nie ruszyłoby 😀

Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
0
ikp-php3 napisał(a):
Riddle napisał(a):

@ikp-php3 Rozważ wyniesienie tej części kodu do funkcji.

Wklej cały kod tutaj, zobaczymy co da się zrobić 😉

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:3454
0

A po co Ci tyle ifów i elsów? No i w nazewnictwie w kodzie najlepiej używać angielskiego, jak muszisz może być polski. Ale nie mieszaj języków.

Kopiuj
if (array_key_exists($tomorrowMonth, $imieniny)) {
    $imieninyJutro = $imieniny[$tomorrowMonth]; // Dlaczego przypisujesz do zmiennej całą tablicę miesiąca? Ma to sens?
    //Potem to możesz niechcący próbować printować i będziesz miał błąd 
    if (array_key_exists($tomorrowDay, $imieninyJutro)) {
        $imieninyJutroValue = $imieninyJutro[$tomorrowDay];
        if ($imieninyJutroValue !== "") { // dlaczego sprawdzasz, czy string pusty? Możesz mieć takie dane w tablicy z imieninami?
            echo $imieninyJutroValue;
        } else {
            echo "Jutro nie ma imienin."; // Powtarzasz ten else 3 razy z tym samym tekstem
        }
    } else {
        echo "Jutro nie ma imienin.";
    }
} else {
    echo "Jutro nie ma imienin.";
}

Czy rozwiązenie z isset($imieniny[$tomorrowMonth][$tomorrowDay]) nie wystarczyło?
Może opisz dokładniej problem i błędy? Jak chcesz wyświetlać imieniny tylko i masz poprawną bazę to nawet i isset nie powinno być potrzebne. Isset sprawdza czy zmienna istniej. W przypadku tablicy czy istnieje jej klucz

Kopiuj
<?php
$arr = []; // inicjalizacja pustej tablicy
$arr['klucz'] = 'wartosc';
var_dump(isset($arr['klucz'])); // sprawdzamy czy jest ustawiona
var_dump(isset($arr['kluczNieistniejacy'])); // sprawdzamy czy jest ustawiona
var_dump(isset($arr['kluczNieistniejacy']['podklucz']['podkluczPodklucza'])); // sprawdzamy czy jest ustawiona

//Output
//bool(true)
//bool(false)
//bool(false)
edytowany 2x, ostatnio: jurek1980
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

skrypt wygląda teraz tak, wiem, że źle, ale działa (oczywiście bez całej tablicy) ;)

Kopiuj
<?php

$imieniny[1][30] = "Martyny, Macieja, Teofila";
$imieniny[1][31] = "Joanny, Ksawerego, Luizy";

$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";

$imieniny[12][30] = "Eugeniusza, Katarzyny, Sabiny";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if (array_key_exists($tomorrowMonth, $imieniny)) {
    $imieninyJutro = $imieniny[$tomorrowMonth];
    if (array_key_exists($tomorrowDay, $imieninyJutro)) {
        $imieninyJutroValue = $imieninyJutro[$tomorrowDay];
        if ($imieninyJutroValue !== "") {
            echo $imieninyJutroValue;
        } else {
            echo "Jutro nie ma imienin.";
        }
    } else {
        echo "Jutro nie ma imienin.";
    }
} else {
    echo "Jutro nie ma imienin.";
}
?>&nbsp;

po mnie nie ma co się spodziewać cudów ;) :(
fakt else jest sporo ;)

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:3454
0

Powinno wystarczyć:

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
}
else {
    echo "nie ma";
}

No I jak masz jakieś warunki które mają zadziałać oba na raz, bo ich efekt będzie taki sam, możesz je złączyć.
Np. Jak jeszcze chciałbyś sprawdzić czy jednak string nie jest pusty.

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay]) AND $imieniny[$tomorrowMonth][$tomorrowDay] !== "") {
//wykonaj
}
else{
// wykonaj dla warunków nie spełnionych
}
edytowany 2x, ostatnio: jurek1980
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 5 godzin
0

W ogóle nie musisz tego sprawdzać bo codziennie są imieniny. Jak raz napiszesz dobrze kod to nie musisz mieć żadnych checków, błąd może tylko oznaczać że kod jest do poprawy


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
jurek1980
Też to pisałem, ale na razie rozumiem, że ma tylko kilka dni w tablicy na testy.
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

"obscurity" o to sprawdzenie chodzi mi, bo wykorzystuję to też do świąt, które uzupełniam co jakiś czas, więc to pomoże ;)

"jurek..." wymazałem 1 lutego z tablicy i nie wyświetlił komunikatu, że nie ma komunikatu "nie ma" :(

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:3454
1

Pewnie gdzieś masz błąd w składni.

Kopiuj
<?php

$imieniny[1][30] = "Martyny, Macieja, Teofila";
$imieniny[1][31] = "Joanny, Ksawerego, Luizy";

//$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";

$imieniny[12][30] = "Eugeniusza, Katarzyny, Sabiny";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

if(isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

https://onlinephp.io/c/629a2

edytowany 1x, ostatnio: jurek1980
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

Twój skrypt jest oczywiście ok, jak nie ma w ogóle 1 lutego

jednak u mnie jeżeli jest pusty dzień to wygląda tak:

Kopiuj
$imieniny[2][1] = "";

i dlatego pewnie nie wyświetla tego komunikatu

ale pomijają ten fakt komunikat jest OK 😉

to sprawdza ten nieszczęsny if

Kopiuj
if ($imieninyJutroValue !== "") {
            echo $imieninyJutroValue;

ale jak to wkleić do Ciebie nie mam pojęcia :(

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:3454
0

Tutaj opisałęm Ci jak łączyć warunki:
https://4programmers.net/Forum/PHP/375472-skrypt_imieninowy_majacy_problem_z_przelomem_miesiaca?p=1990538#id1990538
W tym wypadku masz sprawdzić "czy klucz istnieje" ORAZ "czy nie jest pustym stringiem". Dodatkowo PHP ma taką funkcję empty(), której tu też możesz użyć zamiast porównywać czy napis jest pusty poprzez !==
Spróbuj to napisać sam i jeśli nie będzie działać wklej cały kod. Myślę jednak, że zadziała.

BTW, taki przypadek, że masz pusty napis w imenininach nie powinien chyba wystąpić?

IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

to działa jak wersja "barokowa" 😉

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay]) AND $imieniny[$tomorrowMonth][$tomorrowDay] !== "") {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

oczywiście BARDZO dziękuję :)

edytowany 1x, ostatnio: ikp-php3
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 5 godzin
0
ikp-php3 napisał(a):

to działa jak wersja "barokowa" 😉

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay]) AND $imieniny[$tomorrowMonth][$tomorrowDay] !== "") {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

oczywiście BARDZO dziękuję :)

jak wyżej wspomniano istnieje funkcja empty do tego celu https://www.php.net/manual/en/function.empty.php

empty() is essentially the concise equivalent to !isset($var) || $var == false

ten sam kod może być zapisany jako

Kopiuj
if(!empty($imieniny[$tomorrowMonth][$tomorrowDay])) {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 1x, ostatnio: obscurity
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

zgadza się (obie recepty działają) natomiast, tak zajęliśmy się piciem z innej okazji, że jak wstawiłem imieniny te co były to ich nie wyświetla 🙁

obscurity
:(( (nie dałeś żadnych szczegółów więc mogę jedynie łączyć się z tobą w bólu)
jurek1980
Pewnie w ifie jest zakomentownwy //wykonaj zamiast echo cośtam. Czyli Copy Paste problem.
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0
Kopiuj
$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if(!empty($imieniny[$tomorrowMonth][$tomorrowDay])) {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

jak nie ma dnia, albo jest pusty to komunikat jest wyświetlany, natomiast jak wstawi sie imieniny to komunikat znika, a imona nie pokazują się :(

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:3454
0

//wykonaj - to komentarz. Pomaga czytać ze zrozumieniem ale nie wykonuje żadnej funkcji.
Tak łatwiej pisać przykłady i opisywać problem.
Tu musisz zrobić echo, jak było wcześniej.

IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

jak widać z tym zrozumieniem było cos nie tak ;) - skrypt działa jak trza ;) - dziękuję

Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
0
ikp-php3 napisał(a):

po mnie nie ma co się spodziewać cudów ;) :(
fakt else jest sporo ;)

Co powiesz na coś takiego?

Kopiuj
<?php

$today = new DateTime();
$tomorrow = $today->modify('+1 day');

$todayNameDay = namesByNameDay($today);
$tomorrowNameDay = namesByNameDay($tomorrow);

if ($todayNameDay) {
    echo "Imieniny mają $todayNameDay";
} else {
    echo "Dzisiaj nie ma imienin.";
}

if ($tomorrowNameDay) {
    echo "Jutro imieniny mają $tomorrowNameDay";
} else {
    echo "Jutro nie ma imienin.";
}

function namesByNameDay(DateTime $date): ?string {
    $nameDays[1][30] = "Martyny, Macieja, Teofila";
    $nameDays[1][31] = "Joanny, Ksawerego, Luizy";
    $nameDays[2][1] = "Brygidy, Dobrogniewa, Ignacego";
    $nameDays[2][2] = "Kornela, Marii, Mirosławy";
    $nameDays[12][30] = "Eugeniusza, Katarzyny, Sabiny";
    $nameDays[12][31] = "Mariusza, Melanii, Sylwestra";
    $month = $date->format('n');
    $day = $date->format('j');
    if (array_key_exists($month, $nameDays) && array_key_exists($day, $nameDays[$month])) {
        if ($nameDays[$month][$day] !== '') {
            return $nameDays[$month][$day];
        }
    }
    return null;
}
IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

elegancki skrypt, ale

przekopiowałem, pozmieniałem w tablicy imieniny na nameDays

niestety nie zadziałał :( - nic tam nie kombinowałem tylko rozszerzyłem tablice z dniami i kicha 🙁

jak nie ma rekordu dnia, albo jest pusty to tez nic nie wyświetla :(

Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
0
ikp-php3 napisał(a):

niestety nie zadziałał :( - nic tam nie kombinowałem tylko rozszerzyłem tablice z dniami i kicha 🙁

Pokażesz kod jaki Ci wyszedł?

ikp-php3 napisał(a):

jak nie ma rekordu dnia, albo jest pusty to tez nic nie wyświetla :(

Sprawdzałem opcje zarówno kiedy nie ma wartości w tablicy, jak i gdy jest pusta, i oba przypadki działają.

IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0
Kopiuj
<?php

$today = new DateTime();
$tomorrow = $today->modify('+1 day');

$todayNameDay = namesByNameDay($today);
$tomorrowNameDay = namesByNameDay($tomorrow);

if ($todayNameDay) {
    echo "Imieniny mają $todayNameDay";
} else {
    echo "Dzisiaj nie ma imienin.";
}

if ($tomorrowNameDay) {
    echo "Jutro imieniny mają $tomorrowNameDay";
} else {
    echo "Jutro nie ma imienin.";
}

function namesByNameDay(DateTime $date): ?string {

$nameDays[1][30] = "Martyny, Macieja, Teofila";
$nameDays[1][31] = "Joanny, Ksawerego, Luizy";

$nameDays[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$nameDays[2][2] = "Kornela, Marii, Mirosławy";
$nameDays[2][3] = "Błażeja, Joanny, Telimeny";
$nameDays[2][4] = "Andrzeja, Mariusza, Weroniki";
$nameDays[2][5] = "Agaty, Filipa, Justyniana";

$nameDays[12][29] = "Dawida, Dionizy, Tomasza";
$nameDays[12][30] = "Eugeniusza, Katarzyny, Sabiny";
$nameDays[12][31] = "Mariusza, Melanii, Sylwestra";
    $month = $date->format('n');
    $day = $date->format('j');
    if (array_key_exists($month, $nameDays) && array_key_exists($day, $nameDays[$month])) {
        if ($nameDays[$month][$day] !== '') {
            return $nameDays[$month][$day];
        }
    }
    return null;
}
?>

oczywiście skróciłem tablicę

Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
0
ikp-php3 napisał(a):

oczywiście skróciłem tablicę

Podany kod działa w porządku, sprawdziłem go kilka razy. Co masz na myśli mówiąc że "nie działa", jaki efekt widzisz?

PS: Zamykanie tagu na końcu ?> to raczej zła praktyka. Nic nie daje, a niechcący jakby tam była spacja, to zostanie to potraktowane jak echo.

IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

jest "nic" 😉 nic nie pokazuje, jak kasowałem rekord albo wycinałem imiona to nie wyświetlał tych komunikatów

a wracając do domknięcia skryptów, czytałem, że powinno sie domykać szczególnie w aspekcie php8 - to jak to z tym jest a taka konstrukcja ; ?>

ja się w ogóle na tym nie znam 🙁

edytowany 1x, ostatnio: ikp-php3
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:3454
0
ikp-php3 napisał(a):

jak nie ma rekordu dnia, albo jest pusty to tez nic nie wyświetla :(

Kwestia nomenklatury nazewniczej.
W programowaniu jest kilka terminów jakie warto poznać. Szczegóły interpretacji po trochu zależą od języka programowania. Tak np. zdefiniowanie w PHP zamiennej $x = ''; nie oznacza, że ta zmienia jest pusta. Wręcz przeciwnie. Jest określony jej typ jako string (napis), a sam napis jest pusty.
https://onlinephp.io/c/db721

Kopiuj

<?php
$x = '';
echo "To jest:" . gettype($x). "I ma określoną długość: ". strlen($x) . " - O czym mowi funcja var_dump()";
echo PHP_EOL;
var_dump($x);
$z = Null;
echo "A to jest: " . gettype($z);
echo PHP_EOL;
var_dump($z);

Jeśli więc ustawisz napis w swoim kodzie na pusty i zrobisz echo do przeglądarki to przeglądarka nie wyświetli nic widocznego dla oka bo jest to pusty napis.
Kiedy można stosować taki pusty napis? Np. do inicjacji zmiennej i określania jej typu.

IP
  • Rejestracja:2 miesiące
  • Ostatnio:3 minuty
  • Postów:61
0

toś dosypał do pieca 😉

reasumując w kodzie jest "imienin dziś nie ma" to powinien wyświetlić właśnie to?, jak są jakieś imiona powinien je wyświetlić 😀
w obu przypadkach wg. skryptu coś się powinno zadziać bez "nic" ;)

a jak jest z tym zamknięciem skryptu ?>?

Riddle
Administrator
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10032
0
ikp-php3 napisał(a):

jest "nic" 😉 nic nie pokazuje, jak kasowałem rekord albo wycinałem imiona to nie wyświetlał tych komunikatów

Możesz pokazać screen? Trudno mi uwierzyć że nic się nie pokazuje, dlatego że jest if/else, i w obu gałęziach jest echo.

ikp-php3 napisał(a):

a wracając do domknięcia skryptów, czytałem, że powinno sie domykać szczególnie w aspekcie php8 - to jak to z tym jest a taka konstrukcja ; ?>

Podeślij gdzie to doczytałeś. Raczej nie powinno się, ?> służy w zasadzie do tego żeby łączyć PHP i HTML, a to jest raczej średnia praktyka. Nie polecam.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)