La parte importante non era l'anno bissestile ma l'algoritmo per spartire gli elementi ed è per questo che non ne ho tenuto conto.
Il campo id non serve a nulla. Chiaramente la chiave univoca è la data.
La tabella calendario2 è uguale alla tabella calendario tranne il campo id che non serve a nulla (ribadisco). La data è settata come chiave primaria.
Ti basterebbe fare una select per vedere se il primo gennaio dell'anno corrente non esiste nella tabella e poi richiamare il codice per non dovere cambiare l'anno nello script.
Codice PHP:
<?phpfunction giorni_dell_anno($anno)
{
$date = "$anno-01-01";
for ($i=0;$i<=366;$i++)
{
yield $date;
$date = date('Y-m-d', strtotime("$date +1 days"));
if (substr($date, 0, 4) != $anno) {break;}
}
}
$pdo = new PDO('mysql:host=127.0.0.1; dbname=tests','root','', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$elementi = array('elemento 1', 'elemento 2', 'elemento 3', 'elemento 4', 'elemento 5', 'elemento 6', 'elemento 7', 'elemento 8', 'elemento 9', 'elemento 10');
$x = 0;
foreach (giorni_dell_anno(date('Y')) as $giorno)
{
$elemento = $elementi[$x % count($elementi)];
$query1 = $pdo->query("INSERT INTO calendario2 (Data,elementi) VALUES ('$giorno','$elemento')");
$x++;
}
Lo scopo dell'informatica è di fare cose che durano con meno interventi possibili. Immagina se tutti i programmi che girano tutti i giorni dovessero essere modificati ad ogni cambio di anno !
Ti consiglio di leggere qualche guida su come organizzare le chiavi delle tabelle. Se tu lavorassi per me e venissi con la tua soluzione ti manderei a quel paese