Nasıl gelip bazı değerlerin PHP foreach döngüsü kullanılarak görüntülenir ediliyor değil mi?

6 Cevap php

Ben bilgi MySQL veritabanı belirli bir şekilde biçimlendirilmiş görüntülemek için bir PHP komut dosyası kullanarak bir web sitesi üzerinde çalışıyorum. I (YYYY-MM-DD olarak biçimlendirilmiş) veritabanından tarih değerleri Ay YYYY olarak görüntülenmesini istiyorum. Ben kelime olarak ay görüntülemek için kullanıyorum belki-verimli değil-yeterli kod aşağıda:

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;
}

Bu kod ilk bölümü için ay ve yıl görüntüler. Ay Ağustos veya Eylül olduğu sürece bu, web sayfasında mükemmel görüntüler. Ay Ağustos veya Eylül ise, hiçbir şey bu bölümü için basılmış olur, bu yüzden yerine) "Ağustos 2005" you "2005" olsun istiyorum.

Ağustos ve Eylül elseif ifadeleri ben bu değerler basılmıyor neden hiçbir fikrim yok bu yüzden diğerleri gibi aynı (ben ne söyleyebilirim) biçimlendirilir. Ben sadece bunu 08 ya da 09 ya olarak yazdırır ve değerleri veritabanında doğru bakmak değeri, $ yazdırmak için sorarsanız. Ben bu konu ile oldukça bir süre kafamı duvara vurarak olmuştur çünkü ben gerçekten birisi hızla işaret edeceğini bakan ediyorum basit bir şey olduğunu umuyorum.

(Ben herhangi bir fark olmadığını emin değilim, ama kullanıcıların web sitesinin bu bölümü geliştirmek için bir Joomla sayfasında özel kod ekleyebilirsiniz Joomla Jumi eklentisi kullanıyorum.)

EDIT: I just removed the 0s from 08 and 09 and now they all display properly. So I guess now the question is why did this fix the problem when in the variable that is being checked the values are 08 and 09?

Also, sorry for solving it so shortly after posting a question.

6 Cevap

evet daha iyi bir şekilde sekizlik olarak yorumlamak istiyorum durumunuz veya php 0 önde, kod silmek zorunda

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;
}

Joomla kullanarak konum! 1.5, değil mi? Joomla izin yok! bu işi yapmak:

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));

Hiç web sitenize çevirmek seçerseniz bir yan fayda olarak, o bile doğru / kullanılan dile ay çevirmek olacaktır.

MySQL date_format ile tarihi biçimlendirmek ve istediğiniz şekilde PHP iade edelim. Bu şekilde, PHP ile herhangi bir manipülasyon yapmak gerekmez.

Burada MySQL kılacak bir örnek sorgu:

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

Nerede:

  • date_column, biçimlendirmek istediğiniz tarih saklayan orijinal tablo sütun
  • % M ay ismi tam ('Ocak', 'Şubat', 'Mart', vb) dile istediğiniz anlamına gelir, ve
  • % Y Eğer 4 haneli yıl istediğiniz anlamına gelir.

'2009-09-17 değeri ile date_column bir alan 'Eylül 2009' olarak dönecektir '

Örneğin, aşağıdaki çıkış date_format() değerleri ile birlikte orijinal date_column değerleri gösterir:

+-------------+----------------+
| 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     |
+-------------+----------------+

0 ile başlayan php Numaraları sayılmaktadır sekizli vardır. Bu nedenle neden olabilir. Çevrelerindeki "" koydu.

Ama sorunun açıklamada bağlantıyı okuyunuz. Bu, bir anti-model olarak kabul edilir.

Bu şekilde tüm yerel ayarlar için çalışmasını sağlar ve uzun, çok uzun zaman önce senin için yazılmış şeyler kullanır.

mysql:

select UNIX_TIMESTAMP(time) as unixtime from table;

php:

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

Ayrıca aynı komut dosyası tekrar mysql çağrı olmadan bunu farklı şekillerde biçimlendirmek veya yeniden böylece $ row ['unixtime'] değişkeni yeniden sağlar. Hatta tarih fonksiyonu bir sabiti veya bazı kullanıcı yapılandırılabilir seçeneklere farklı bir dize sağlayabilir.

PHP çeşitli fonksiyonlara sahiptir (ve PHP 5.3 olarak, DateTime yazın) süreleri ve tarihleri ​​ile başa çıkmak için.

Örneğin, PHP 5.x:

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

(Bu programlama dilleri arasında genellikle taşınabilir çünkü strftime dahil)