Wie kommt es sind bestimmte Werte nicht werden mit PHP foreach-Schleife angezeigt?

StackOverflow https://stackoverflow.com/questions/1432980

  •  07-07-2019
  •  | 
  •  

Frage

Ich arbeite auf einer Website einen PHP-Skript mit Informationen angezeigt werden formatierte eine bestimmte Art und Weise aus einer MySQL-Datenbank. Ich mag die aktuellsten Werte aus der Datenbank (die als YYYY-MM-DD formatiert ist) als Monat JJJJ angezeigt werden. Die vielleicht-nicht-effiziente-genug Code verwende ich die Monate als Wörter angezeigt werden unter:

foreach($monthstart as $monthnext)
    {
    preg_match("/[[0-9][0-9]]*/", $monthnext, $startmonthfull);
    }
echo "<b>Duration: </b>";
foreach($startmonthfull as $which)
{
   if($which == 01)
{
echo "January ";
}
elseif($which == 02)
{
echo "February ";
}
elseif($which == 03)
{
echo "March ";
}
elseif($which == 04)
{
echo "April ";
}
elseif($which == 05)
{
  echo "May ";
}
elseif($which == 06)
{
  echo "June ";
}
elseif($which == 07)
{
  echo "July ";
}
elseif($which == 08)
{
  echo "August ";
}
elseif($which == 09)
{
  echo  "September ";
}
elseif($which == 10)
{
  echo "October ";
}
elseif($which == 11)
{
  echo "November ";
}
elseif($which == 12)
{
  echo "December ";
}
}
foreach($year as $printyear)
{
  echo $printyear;
}

Dieser Code zeigt den Monat und das Jahr zum ersten Teil. Dies zeigt perfekt auf der Webseite, es sei denn, der Monat August oder September. Wenn der Monat August oder September ist, wird nichts für den Teil gedruckt, so dass anstelle von „August 2005“) würden Sie „2005“ erhalten.

Der August und September elseif-Anweisungen formatiert (von dem, was ich sagen kann) genau das gleiche wie die anderen so habe ich keine Ahnung, warum diese Werte nicht zu drucken. Wenn ich es einfach bitten, das $ zu drucken, den Wert, druckt es entweder 08 oder 09 und die Werte in der Datenbank richtigen aussehen. Ich hoffe wirklich, es ist etwas einfach ich bin mit Blick auf, dass jemand schnell heraus wird zeigen, weil ich mit diesem Thema seit geraumer Zeit meinen Kopf gegen die Wand hämmern wurde.

(Ich bin nicht sicher, ob es einen Unterschied macht, aber ich bin mit der Jumi-Plugin in Joomla die Benutzern benutzerdefinierten Code in einer Joomla Seite hinzufügen kann in diesem Abschnitt der Website zu entwickeln.)

EDIT: Ich entfernt nur die 0er von 08 und 09 und jetzt alle Display richtig sie. Also denke ich, Jetzt ist die Frage, warum das Problem behoben, wenn in den Variablen, die die Werte werden überprüft wird, sind 08 und 09?

Auch leid es so kurz Lösung nach einer Frage der Veröffentlichung.

War es hilfreich?

Lösung

ja, müssen Sie die führende 0 auf Ihrem Zustand oder PHP löschen würde es als Oktal interpretieren, Sie Code in einer besseren Art und Weise

foreach($monthstart as $monthnext){
    preg_match("/[[0-9][0-9]]*/", $monthnext, $startmonthfull);
}
echo "<b>Duration: </b>";
$monthArray = array(
1 => 'January',
2 => 'February',
3 => 'March',
4 => 'April',
5 => 'May',
6 => 'June',
7 => 'July',
8 => 'August',
9 => 'September',
10 => 'October',
11 => 'November',
12 => 'December');

foreach($startmonthfull as $which){
 echo($monthArray[$which] . " ");
}
foreach($year as $printyear)
{
  echo $printyear;
}

Andere Tipps

Sie sind mit Joomla! 1.5, nicht wahr? Warum lassen Joomla nicht! tun, dass die Arbeit:

if (!defined('MY_DATE_FORMAT'))
   define('MY_DATE_FORMAT', '%B %Y');
jimport('joomla.utilities.date');

$mysql_date = '2009-08-01';

$jdate = new JDate($mysql_date);
echo $jdate->toFormat(JText::_(MY_DATE_FORMAT));

Als Nebeneffekt, er wird sogar den Monat in die rechten / verwendeten Sprache übersetzen, wenn Sie jemals wählen Ihre Website zu übersetzen.

Lassen Sie MySQL das Datumsformat mit date_format und schicken Sie es in der Art und Weise Sie wollen PHP. Auf diese Weise, Sie brauchen keine Manipulation mit PHP zu tun.

Hier ist ein Beispiel Abfrage, die Sie MySQL machen würde:

select date_format(date_column, '%M %Y') as formatted_date from table;

Dabei gilt:

  • date_column ist die ursprüngliche Tabellenspalte, die das Datum speichert Sie formatieren möchten,
  • % M bedeutet, dass Sie die Monatsnamen in voller buchstabiert werden sollen ( 'Januar', 'Februar', 'März', usw.), und
  • % Y bedeutet, dass Sie wollen, dass die 4-stellige Jahr.

Ein Feld in date_column mit Wert '2009-09-17' wird wieder als 'September 2009'

Zum Beispiel die folgende Ausgabe zeigt die ursprünglichen date_column Werte zusammen mit den date_format() Werte:

+-------------+----------------+
| date_column | formatted_date |
+-------------+----------------+
| 2009-09-11  | September 2009 |
| 2009-09-02  | September 2009 |
| 2009-09-01  | September 2009 |
| 2009-08-31  | August 2009    |
| 2009-08-04  | August 2009    |
| 2009-08-01  | August 2009    |
| 2009-07-11  | July 2009      |
| 2009-07-01  | July 2009      |
| 2009-06-30  | June 2009      |
| 2009-06-20  | June 2009      |
| 2009-06-09  | June 2009      |
| 2009-05-26  | May 2009       |
| 2009-05-09  | May 2009       |
| 2009-05-08  | May 2009       |
| 2009-04-22  | April 2009     |
| 2009-04-20  | April 2009     |
| 2009-04-19  | April 2009     |
| 2009-03-05  | March 2009     |
| 2009-03-04  | March 2009     |
| 2009-03-03  | March 2009     |
+-------------+----------------+

Die Zahlen in PHP mit einer 0 beginnen, sind considerd Oktal. Dies könnte der Grund sein, warum. Put "" um sie herum.

Aber bitte den Link in dem Kommentar zu Ihrer Frage lesen. Dies wird als ein Anti-Muster sein.

Auf diese Weise wird sichergestellt, es für alle Gegenden funktioniert und es nutzt Dinge, die vor Ihnen eine langen, langen Zeit geschrieben wurden.

mysql:

select UNIX_TIMESTAMP(time) as unixtime from table;

php:

$formatted_time = date('F Y', $row['unixtime']);

Es erlaubt Ihnen auch die $ row [ ‚Unix-Zeit‘] Variable wieder zu verwenden, so dass Sie es verschiedene Möglichkeiten, formatieren oder es wiederverwenden, ohne mysql wieder im selben Skript aufrufen. Man könnte sogar eine andere Zeichenfolge aus einer Konstante liefern oder von einigen Benutzern konfigurierbaren Optionen an die Datumsfunktion.

PHP hat mehrere Funktionen (und wie von PHP 5.3, die Datetime Typ) mit Zeiten und Daten zu befassen.

Zum Beispiel in PHP 5.x:

$mytime = strtotime($monthstart);
// $output_date = date("F Y", $mytime);
$output_date = strftime("%B %Y", $mytime);

(strftime aufgenommen, weil er über Programmiersprachen allgemein tragbar ist)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top