PHP Foreach 루프를 사용하여 특정 값이 표시되지 않습니까?
문제
PHP 스크립트를 사용하여 웹 사이트에서 MySQL 데이터베이스에서 특정 방식으로 형식화 된 정보를 표시하고 있습니다. 데이터베이스의 날짜 값 (YYYY-MM-DD로 형식화 됨)이 Month 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;
}
이 코드는 첫 번째 부분의 월과 연도를 표시합니다. 월이 8 월 또는 9 월이 아닌 한 웹 페이지에 완벽하게 표시됩니다. 월이 8 월 또는 9 월이라면 해당 부분에 대해 아무것도 인쇄되지 않으므로 "2005 년 8 월"대신) "2005"를 얻을 수 있습니다.
8 월과 9 월 elseif 문장은 다른 사람들과 정확히 동일한 형식 (내가 말할 수있는 것)이므로 왜 이러한 값이 인쇄되지 않는지 모릅니다. 단순히 $ 값을 인쇄하도록 요청하면 08 또는 09로 인쇄하면 값이 데이터베이스에서 적절하게 보입니다. 나는이 문제로 꽤 오랫동안 벽에 머리를 두드리기 때문에 누군가가 빨리 지적 할 것이라는 간과하는 단순한 것이 있기를 정말로 바라고 있습니다.
(차이가 있는지 확실하지 않지만 Joomla의 Jumi 플러그인을 사용하여 사용자가 Woomla 페이지에 사용자 정의 코드를 추가하여 웹 사이트 의이 섹션을 개발할 수 있습니다.)
편집 : 08과 09에서 0을 제거했는데 이제 모두 제대로 표시됩니다. 그래서 나는 추측한다 이제 문제는 값이 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;
}
다른 팁
당신은 Joomla를 사용하고 있습니다! 1.5, 맞습니까? 왜 Joomla에게 보내지 않습니까! 그 일을하십시오 :
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));
부수적 인 혜택으로, 그는 웹 사이트를 번역하기로 선택한 경우 달을 올바른/중고 언어로 번역 할 것입니다.
MySQL이 날짜를 형식화하십시오 날짜 형식 원하는 방식으로 PHP로 반환하십시오. 이런 식으로 PHP로 조작 할 필요는 없습니다.
다음은 mysql에 만들 수있는 예제입니다.
select date_format(date_column, '%M %Y') as formatted_date from table;
어디에:
- date_column은 포맷하려는 날짜를 저장하는 원래 테이블 열입니다.
- %m은 월 이름이 전체 ( '1 월', '2 월', '3 월'등)로 철자를 원한다는 것을 의미합니다.
- %y는 4 자리 연도를 원한다는 것을 의미합니다.
'2009-09-17'의 가치를 가진 date_column의 필드는 '2009 년 9 월'으로 돌아갑니다.
예를 들어, 다음 출력은 원본을 표시합니다 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 |
+-------------+----------------+
0으로 시작하는 PHP의 숫자는 8 월을 고려합니다. 이것이 이유가 될 수 있습니다. 그들 주위에 ""를 넣으십시오.
그러나 귀하의 질문에 대한 의견의 링크를 읽으십시오. 이것은 반란 방지로 간주됩니다.
이 방법은 모든 지역에서 작동하도록 보장하고 오래 전에 오래 전에 쓰여진 물건을 사용합니다.
mysql :
select UNIX_TIMESTAMP(time) as unixtime from table;
PHP :
$formatted_time = date('F Y', $row['unixtime']);
또한 $ row [ 'unixtime'] 변수를 재사용 할 수 있으므로 동일한 스크립트에서 MySQL을 다시 호출하지 않고 다른 방법을 형식화하거나 재사용 할 수 있습니다. 상수 또는 일부 사용자 구성 가능한 옵션에서 날짜 함수에 이르기까지 다른 문자열을 제공 할 수도 있습니다.
PHP에는 몇 가지 기능이 있습니다 (및 PHP 5.3 기준 날짜 시간 타입) 시간과 날짜를 다루기 위해.
예를 들어, php 5.x에서 :
$mytime = strtotime($monthstart);
// $output_date = date("F Y", $mytime);
$output_date = strftime("%B %Y", $mytime);
(Strftime은 일반적으로 프로그래밍 언어에서 휴대용이기 때문에 포함됩니다)