كيف قيم معينة لا يتم عرضها باستخدام PHP foreach الحلقة ؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

أنا أعمل على موقع على شبكة الانترنت باستخدام برنامج نصي PHP لعرض المعلومات مهيأ بطريقة معينة من قاعدة بيانات MySQL.أريد تاريخ قيم من قاعدة البيانات (التي تم تنسيقها كما YYYY-MM-DD) ليتم عرضها الشهر YYYY.ربما-لا-كفاءة-ما يكفي من مدونة أنا باستخدام لعرض أشهر الكلمات أدناه:

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

يعرض هذا الرمز الشهر و السنة الجزء الأول.يعرض هذا تماما على صفحة ويب ، ما لم يكن في شهر آب / أغسطس أو أيلول / سبتمبر.إذا كان شهر آب / أغسطس أو أيلول / سبتمبر ، لا شيء يحصل المطبوعة لهذا الجزء, وذلك بدلا من "آب / أغسطس 2005") ستحصل على "2005".

آب / أغسطس و أيلول / سبتمبر السيف البيانات المنسقة (من ما أستطيع أن أقول) بالضبط نفس الآخرين لذلك ليس لدي فكرة لماذا هذه القيم ليست الطباعة.إذا أطلب منك ببساطة أن طباعة $والتي القيمة ، فإنه يطبع إما 08 أو 09 والقيم تبدو مناسبة في قاعدة البيانات.أنا آمل حقا هناك شيء بسيط أنا تطل على أن شخصا ما سوف أشير بسرعة لأنني كنت أضرب رأسي بالحائط لبعض الوقت مع هذه المسألة.

(لست متأكدا إذا كان هناك فرق ولكن أنا باستخدام Jumi المساعد في جملة مما يسمح للمستخدمين بإضافة التعليمات البرمجية المخصصة في جملة صفحة لتطوير هذا القسم من الموقع.)

تحرير:أنا فقط إزالة 0s من 08 و 09 و الآن هم كل عرض بشكل صحيح.لذا أعتقد والسؤال الآن هو لماذا هل عمل ذلك على إصلاح المشكلة عند في المتغير الذي يتم التحقق من القيم 08 و 09?

أيضا, آسف على حل ذلك بعد وقت قصير من نشر السؤال.

هل كانت مفيدة؟

المحلول

نعم لديك لمحو الرائدة 0 على حالتك أو php شأنها أن تفسر على أنها ثماني أنت رمز في أفضل طريقة

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

نصائح أخرى

كنت تستخدم جملة!1.5, صحيح ؟ لماذا لا يسمحون جملة!هل هذا العمل:

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

ومن الفوائد الجانبية ، وقال انه حتى ترجمة الشهر إلى الحق/اللغة المستخدمة إذا كنت من أي وقت مضى اختيار ترجمة موقع الويب الخاص بك.

اسمحوا الخلية تنسيق موعد مع date_format وإعادته إلى PHP في بالطريقة التي تريدها.هذه الطريقة لا تحتاج أن تفعل أي تلاعب مع PHP.

هنا هو مثال على الاستعلام الذي من شأنه أن يجعل الخلية:

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

حيث:

  • date_column هو الأصل عمود الجدول الذي يخزن التاريخ الذي تريد تنسيق ،
  • %M يعني أنك تريد اسم الشهر المنصوص عليها في الكامل ('يناير', 'فبراير', 'مارس', الخ) ،
  • %Y يعني تريد 4 أرقام العام.

حقل في date_column مع قيمة '2009-09-17' سوف أعود 'أيلول / سبتمبر 2009'

على سبيل المثال, الإخراج التالي يعرض الأصلي date_column القيم جنبا إلى جنب مع date_format() القيم:

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

الأرقام في php ابتداء من 0 هل الهجر الثماني.هذا يمكن أن يكون السبب.وضعت "" من حولهم.

ولكن يرجى قراءة الرابط في التعليق على سؤالك.هذا يعتبر مضاد نمط.

بهذه الطريقة يضمن يعمل على جميع لغات ويستخدم الأشياء التي كانت مكتوبة لك ، منذ زمن طويل.

الخلية:

select UNIX_TIMESTAMP(time) as unixtime from table;

php:

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

كما يسمح لك لإعادة $row['unixtime'] متغير بحيث يمكنك تنسيق ذلك بطرق مختلفة أو إعادة استخدامها دون استدعاء الخلية مرة أخرى في نفس البرنامج النصي.حتى يمكن توفير سلسلة مختلفة من ثابت أو من بعض المستخدمين خيارات شكلي تاريخ وظيفة.

PHP لديها عدة وظائف (و PHP 5.3 ، التاريخ والوقت نوع) للتعامل مع الأوقات والتواريخ.

فعلى سبيل المثال ، في PHP 5.x:

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

(strftime يتم تضمين لأنه عادة المحمولة عبر لغات البرمجة)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top