我有一个日期在2017年10月10日至11日之间的数组。这些项目按时间顺序列出。
我正在寻找一个PHP解决方案来重新排列数组的结构或智能循环,以便我可以按照自己喜欢的方式组织日期。
我需要回应的是: (旧尝试,请忽略此示例。只需将其保留在已提供的解决方案中。请参阅下面的更新。)
'1', '1, 10, 2017', '1, 11, 2017'
'2', '2, 10, 2017', '2, 11, 2017',
...
'30', '30, 10, 2017', '30, 11, 2017',
'31', '31, 10, 2017', ''
请注意,11月(11
)只有30天,因此没有第31个条目。
所以我需要一个遍历数组的循环,并在相同的开始日回应所有日期,然后做一个<br>
或类似的。它总是应该在31号结束时有数据与否。
更新: 我的输出需要略有不同:
['1', '1, 10, 2017', '1, 11, 2017'],
['2', '2, 10, 2017', '2, 11, 2017'],
...
['30', '30, 10, 2017', '30, 11, 2017'],
['31', '31, 10, 2017', '0, 0, 0']
主要变化是:
'0, 0, 0'
而不是空字符串。背景是我有一个必然需要任何值的函数,可能是0。
我尝试了不同的东西(将日期,月份和年份分开来分离数组/使用for-loops /使用foreach-loops)但没有真正起作用。我的主要问题似乎是每个月都有不同的天数。
你有什么建议如何工作?尝试重组阵列可能会更好吗?还是有其他解决方案?
代码应该使用不同的日期范围(不仅是我上面提到的那些)。
这是我的阵列:
Array
(
[0] => 1, 10, 2017
[1] => 2, 10, 2017
[2] => 3, 10, 2017
[3] => 4, 10, 2017
[4] => 5, 10, 2017
[5] => 6, 10, 2017
[6] => 7, 10, 2017
[7] => 8, 10, 2017
[8] => 9, 10, 2017
[9] => 10, 10, 2017
[10] => 11, 10, 2017
[11] => 12, 10, 2017
[12] => 13, 10, 2017
[13] => 14, 10, 2017
[14] => 15, 10, 2017
[15] => 16, 10, 2017
[16] => 17, 10, 2017
[17] => 18, 10, 2017
[18] => 19, 10, 2017
[19] => 20, 10, 2017
[20] => 21, 10, 2017
[21] => 22, 10, 2017
[22] => 23, 10, 2017
[23] => 24, 10, 2017
[24] => 25, 10, 2017
[25] => 26, 10, 2017
[26] => 27, 10, 2017
[27] => 28, 10, 2017
[28] => 29, 10, 2017
[29] => 30, 10, 2017
[30] => 31, 10, 2017
[31] => 1, 11, 2017
[32] => 2, 11, 2017
[33] => 3, 11, 2017
[34] => 4, 11, 2017
[35] => 5, 11, 2017
[36] => 6, 11, 2017
[37] => 7, 11, 2017
[38] => 8, 11, 2017
[39] => 9, 11, 2017
[40] => 10, 11, 2017
[41] => 11, 11, 2017
[42] => 12, 11, 2017
[43] => 13, 11, 2017
[44] => 14, 11, 2017
[45] => 15, 11, 2017
[46] => 16, 11, 2017
[47] => 17, 11, 2017
[48] => 18, 11, 2017
[49] => 19, 11, 2017
[50] => 20, 11, 2017
[51] => 21, 11, 2017
[52] => 22, 11, 2017
[53] => 23, 11, 2017
[54] => 24, 11, 2017
[55] => 25, 11, 2017
[56] => 26, 11, 2017
[57] => 27, 11, 2017
[58] => 28, 11, 2017
[59] => 29, 11, 2017
[60] => 30, 11, 2017
)
感谢您的任何帮助!
看来你想要的结果是一种伪数组字符串。如果您打算将其用作数组或json,我可以优化此代码以更好地满足您的最终要求。
代码展示了3个不同的起点:(qazxswpoi)
Demo
输出:
function buildPseudoArray($month1,$year1){ // default dates in params: $month1=date('m'),$year1=date('Y') causes Fatal error
echo "Result for $month1-$year1:\n";
$m1_last=date('t',strtotime("$year1-$month1"));
if($month1==12){
$year2=$year1+1;
$month2=1;
}else{
$year2=$year1;
$month2=$month1+1;
}
$m2_last=date('t',strtotime("$year2-$month2"));
$result='';
for($i=1,$stop=31; $i<=$stop; ++$i){
$result.="['$i', ";
$result.=$i<=$m1_last ? "'$i, $month1, $year1', " : "'0, 0, 0', "; // conditionally fill missing dates
$result.=$i<=$m2_last ? "'$i, $month2, $year2'" : "'0, 0, 0'"; // conditionally fill missing dates
$result.=']'.($i<$stop ? ',' : '')."\n"; // conditionally add comma to end of row
}
return $result;
}
echo buildPseudoArray(1,2017); // shows 0, 0, 0 in first column
echo "\n---------------------\n";
echo buildPseudoArray('2',2017); // shows 0, 0, 0 in second column
echo "\n---------------------\n";
echo buildPseudoArray(12,2017); // shows incrementation into next year
这是Google Charts任务的准备代码:(Result for 1-2017:
['1', '1, 1, 2017', '1, 2, 2017'],
['2', '2, 1, 2017', '2, 2, 2017'],
['3', '3, 1, 2017', '3, 2, 2017'],
['4', '4, 1, 2017', '4, 2, 2017'],
['5', '5, 1, 2017', '5, 2, 2017'],
['6', '6, 1, 2017', '6, 2, 2017'],
['7', '7, 1, 2017', '7, 2, 2017'],
['8', '8, 1, 2017', '8, 2, 2017'],
['9', '9, 1, 2017', '9, 2, 2017'],
['10', '10, 1, 2017', '10, 2, 2017'],
['11', '11, 1, 2017', '11, 2, 2017'],
['12', '12, 1, 2017', '12, 2, 2017'],
['13', '13, 1, 2017', '13, 2, 2017'],
['14', '14, 1, 2017', '14, 2, 2017'],
['15', '15, 1, 2017', '15, 2, 2017'],
['16', '16, 1, 2017', '16, 2, 2017'],
['17', '17, 1, 2017', '17, 2, 2017'],
['18', '18, 1, 2017', '18, 2, 2017'],
['19', '19, 1, 2017', '19, 2, 2017'],
['20', '20, 1, 2017', '20, 2, 2017'],
['21', '21, 1, 2017', '21, 2, 2017'],
['22', '22, 1, 2017', '22, 2, 2017'],
['23', '23, 1, 2017', '23, 2, 2017'],
['24', '24, 1, 2017', '24, 2, 2017'],
['25', '25, 1, 2017', '25, 2, 2017'],
['26', '26, 1, 2017', '26, 2, 2017'],
['27', '27, 1, 2017', '27, 2, 2017'],
['28', '28, 1, 2017', '28, 2, 2017'],
['29', '29, 1, 2017', '0, 0, 0'],
['30', '30, 1, 2017', '0, 0, 0'],
['31', '31, 1, 2017', '0, 0, 0']
---------------------
Result for 2-2017:
['1', '1, 2, 2017', '1, 3, 2017'],
['2', '2, 2, 2017', '2, 3, 2017'],
['3', '3, 2, 2017', '3, 3, 2017'],
['4', '4, 2, 2017', '4, 3, 2017'],
['5', '5, 2, 2017', '5, 3, 2017'],
['6', '6, 2, 2017', '6, 3, 2017'],
['7', '7, 2, 2017', '7, 3, 2017'],
['8', '8, 2, 2017', '8, 3, 2017'],
['9', '9, 2, 2017', '9, 3, 2017'],
['10', '10, 2, 2017', '10, 3, 2017'],
['11', '11, 2, 2017', '11, 3, 2017'],
['12', '12, 2, 2017', '12, 3, 2017'],
['13', '13, 2, 2017', '13, 3, 2017'],
['14', '14, 2, 2017', '14, 3, 2017'],
['15', '15, 2, 2017', '15, 3, 2017'],
['16', '16, 2, 2017', '16, 3, 2017'],
['17', '17, 2, 2017', '17, 3, 2017'],
['18', '18, 2, 2017', '18, 3, 2017'],
['19', '19, 2, 2017', '19, 3, 2017'],
['20', '20, 2, 2017', '20, 3, 2017'],
['21', '21, 2, 2017', '21, 3, 2017'],
['22', '22, 2, 2017', '22, 3, 2017'],
['23', '23, 2, 2017', '23, 3, 2017'],
['24', '24, 2, 2017', '24, 3, 2017'],
['25', '25, 2, 2017', '25, 3, 2017'],
['26', '26, 2, 2017', '26, 3, 2017'],
['27', '27, 2, 2017', '27, 3, 2017'],
['28', '28, 2, 2017', '28, 3, 2017'],
['29', '0, 0, 0', '29, 3, 2017'],
['30', '0, 0, 0', '30, 3, 2017'],
['31', '0, 0, 0', '31, 3, 2017']
---------------------
Result for 12-2017:
['1', '1, 12, 2017', '1, 1, 2018'],
['2', '2, 12, 2017', '2, 1, 2018'],
['3', '3, 12, 2017', '3, 1, 2018'],
['4', '4, 12, 2017', '4, 1, 2018'],
['5', '5, 12, 2017', '5, 1, 2018'],
['6', '6, 12, 2017', '6, 1, 2018'],
['7', '7, 12, 2017', '7, 1, 2018'],
['8', '8, 12, 2017', '8, 1, 2018'],
['9', '9, 12, 2017', '9, 1, 2018'],
['10', '10, 12, 2017', '10, 1, 2018'],
['11', '11, 12, 2017', '11, 1, 2018'],
['12', '12, 12, 2017', '12, 1, 2018'],
['13', '13, 12, 2017', '13, 1, 2018'],
['14', '14, 12, 2017', '14, 1, 2018'],
['15', '15, 12, 2017', '15, 1, 2018'],
['16', '16, 12, 2017', '16, 1, 2018'],
['17', '17, 12, 2017', '17, 1, 2018'],
['18', '18, 12, 2017', '18, 1, 2018'],
['19', '19, 12, 2017', '19, 1, 2018'],
['20', '20, 12, 2017', '20, 1, 2018'],
['21', '21, 12, 2017', '21, 1, 2018'],
['22', '22, 12, 2017', '22, 1, 2018'],
['23', '23, 12, 2017', '23, 1, 2018'],
['24', '24, 12, 2017', '24, 1, 2018'],
['25', '25, 12, 2017', '25, 1, 2018'],
['26', '26, 12, 2017', '26, 1, 2018'],
['27', '27, 12, 2017', '27, 1, 2018'],
['28', '28, 12, 2017', '28, 1, 2018'],
['29', '29, 12, 2017', '29, 1, 2018'],
['30', '30, 12, 2017', '30, 1, 2018'],
['31', '31, 12, 2017', '31, 1, 2018']
)
Demo Link
输出3个电话:
function getOrdersByDay($i,$m,$y){
return rand(0,50); // put your stuff in here
}
function buildPseudoArray($month1,$year1){ // default dates in params: $month1=date('m'),$year1=date('Y') causes Fatal error
echo "Result for $month1-$year1:\n";
$m1_last=date('t',strtotime("$year1-$month1"));
if($month1==12){
$year2=$year1+1;
$month2=1;
}else{
$year2=$year1;
$month2=$month1+1;
}
$m2_last=date('t',strtotime("$year2-$month2"));
$result='[';
$result.="['Day', '".date('M Y',strtotime("$year1-$month1"))."', '".date('M Y',strtotime("$year2-$month2"))."'],\n";
for($i=1,$stop=31; $i<=$stop; ++$i){
$result.="['".str_pad($i,2,0,STR_PAD_LEFT).".', "; // pad single digit days with a leading zero, add trailing dot
$result.="'".($i<=$m1_last ? getOrdersByDay($i,$month1,$year1) : getOrdersByDay(0,0,0))."', "; // conditionally parameters
$result.="'".($i<=$m2_last ? getOrdersByDay($i,$month2,$year2) : getOrdersByDay(0,0,0))."', "; // conditionally parameters
$result.=']'.($i<$stop ? ',' : ']')."\n"; // conditionally add comma to end of row
}
return $result;
}
echo buildPseudoArray(1,2017); // 0, 0, 0 in first column
echo "\n---------------------\n";
echo buildPseudoArray('2',2017); // 0, 0, 0 in second column
echo "\n---------------------\n";
echo buildPseudoArray(12,2017); // incrementation into next year
我建议甚至不做那样的事。日期和时间不是你想要手动处理的东西,因为它们看起来要复杂得多。
Result for 1-2017:
[['Day', 'Jan 2017', 'Feb 2017'],
['01.', '22', '9', ],
['02.', '30', '24', ],
['03.', '26', '5', ],
['04.', '46', '25', ],
['05.', '7', '24', ],
['06.', '17', '22', ],
['07.', '34', '27', ],
['08.', '0', '26', ],
['09.', '43', '38', ],
['10.', '27', '49', ],
['11.', '7', '22', ],
['12.', '14', '26', ],
['13.', '0', '30', ],
['14.', '45', '43', ],
['15.', '30', '45', ],
['16.', '34', '34', ],
['17.', '19', '30', ],
['18.', '34', '40', ],
['19.', '25', '39', ],
['20.', '1', '1', ],
['21.', '40', '49', ],
['22.', '26', '40', ],
['23.', '37', '44', ],
['24.', '16', '8', ],
['25.', '21', '3', ],
['26.', '47', '35', ],
['27.', '47', '25', ],
['28.', '1', '43', ],
['29.', '7', '30', ],
['30.', '8', '28', ],
['31.', '38', '13', ]]
---------------------
Result for 2-2017:
[['Day', 'Feb 2017', 'Mar 2017'],
['01.', '5', '48', ],
['02.', '43', '33', ],
['03.', '32', '13', ],
['04.', '30', '23', ],
['05.', '10', '41', ],
['06.', '3', '16', ],
['07.', '46', '23', ],
['08.', '3', '12', ],
['09.', '6', '23', ],
['10.', '48', '29', ],
['11.', '6', '49', ],
['12.', '14', '34', ],
['13.', '44', '2', ],
['14.', '17', '11', ],
['15.', '47', '44', ],
['16.', '35', '9', ],
['17.', '0', '26', ],
['18.', '26', '0', ],
['19.', '7', '5', ],
['20.', '0', '17', ],
['21.', '4', '9', ],
['22.', '43', '37', ],
['23.', '21', '28', ],
['24.', '22', '12', ],
['25.', '15', '50', ],
['26.', '16', '34', ],
['27.', '33', '21', ],
['28.', '2', '37', ],
['29.', '31', '41', ],
['30.', '50', '28', ],
['31.', '3', '34', ]]
---------------------
Result for 12-2017:
[['Day', 'Dec 2017', 'Jan 2018'],
['01.', '42', '48', ],
['02.', '17', '44', ],
['03.', '11', '26', ],
['04.', '5', '11', ],
['05.', '44', '1', ],
['06.', '37', '33', ],
['07.', '33', '32', ],
['08.', '43', '35', ],
['09.', '5', '35', ],
['10.', '27', '6', ],
['11.', '24', '0', ],
['12.', '35', '33', ],
['13.', '38', '4', ],
['14.', '11', '35', ],
['15.', '0', '18', ],
['16.', '3', '43', ],
['17.', '31', '20', ],
['18.', '12', '19', ],
['19.', '38', '34', ],
['20.', '38', '45', ],
['21.', '11', '32', ],
['22.', '12', '13', ],
['23.', '47', '38', ],
['24.', '37', '17', ],
['25.', '36', '44', ],
['26.', '47', '4', ],
['27.', '40', '48', ],
['28.', '5', '20', ],
['29.', '18', '4', ],
['30.', '15', '48', ],
['31.', '38', '19', ]]
输出:
<?php
$period = new DatePeriod(
new DateTime('2017-01-01'), // start
new DateInterval('P1M'), // interval of 1 month
new DateTime('2018-01-01') // end
);
foreach( $period as $date ) {
printf("%s\n", $date->format('Y-m-d'));
}
2017-01-01
2017-02-01
2017-03-01
2017-04-01
2017-05-01
2017-06-01
2017-07-01
2017-08-01
2017-09-01
2017-10-01
2017-11-01
2017-12-01
http://php.net/manual/en/class.datetime.php
http://php.net/manual/en/class.dateperiod.php
http://php.net/manual/en/class.dateinterval.php
并且根据经验:如果您发现自己手动定义了大量重复的数组,那么您应该退后一步并重新检查您的方法。
我完全同意@Sammitch对此的看法。如果必须使用此数组,则可以遍历数组并使用strtotime在Unix时间内转换条目:
http://php.net/manual/en/book.datetime.php
如果你想按原样处理数组,这里有一些东西可以让你接近你想要的东西:
foreach($date_array as $key => $value) {
$value = explode(",",$value);
$value = trim($value[2])."-".trim($value[1])."-".trim($value[0]);
$value = strtotime($value);
$date_array[$key] = $value;
}
输出:
'1', '1, 10, 2017', '1, 11, 2017',
'2', '2, 10, 2017', '2, 11, 2017',
...
'30', '30, 10, 2017', '30, 11, 2017',
'31', '31, 10, 2017',