请帮我这个阵列打印。
阵列
[year_2014] => Array
(
[0] => Array
(
[amount] => 21960
[year] => 2014
[month] => 1
)
[1] => Array
(
[amount] => 25866
[year] => 2014
[month] => 2
)
[2] => Array
(
[amount] => 7840
[year] => 2014
[month] => 3
)
[3] => Array
(
[amount] => 424644
[year] => 2014
[month] => 5
)
[4] => Array
(
[amount] => 22052
[year] => 2014
[month] => 6
)
[5] => Array
(
[amount] => 28037
[year] => 2014
[month] => 7
)
)
我需要根据月回显金额,以便输出,
结果
21960, 25866, 7840, 0, 424644, 22052, 28037, 0, 0, 0, 0, 0
即如果一个月不存在那么价值必须为零,我需要整整十二个月。
亲爱的好心,请帮助我得到这个结果。
一些背景
项目是在codeigniter中完成的,我已经搞了一些for foreach但是它没有工作。
谢谢。
答案 0 :(得分:2)
试试:
$output = array_fill(0, 12, 0);
array_map(function ($item) use (&$output) {
$output[$item['month'] - 1] = $item['amount'];
}, $input['year_2014']);
或简单foreach
:
$output = array_fill(0, 12, 0);
foreach ($input['year_2014'] as $item) {
$output[$item['month'] - 1] = $item['amount'];
}
输出:
array (size=12)
0 => int 21960
1 => int 25866
2 => int 7840
3 => int 0
4 => int 424644
5 => int 22052
6 => int 28037
7 => int 0
8 => int 0
9 => int 0
10 => int 0
11 => int 0
说明:
array_fill
创建一个包含12个元素的数组,其中包含0
个值。
foreach
遍历year_2014
个数据数组,并将项目的金额设置为month - 1
位置。
array_map
与foreach
的效果相同,在这里可能会有些过分,但效果也很好。
答案 1 :(得分:1)
你可以每月循环:
$monthsList = array();
foreach( $year_2014 as $months)
$monthsList[$months['month']] = $months['amount'];
print_r($monthsList); // will output array(1 => 21960, 2 => 21960 ...)
for ( $i = 1 ; $i <= 12 ; $i++ )
{
// You check if an amount exists for this month.
$amount = !empty($monthsList[$i]) ? $monthsList[$i] : 0;
// You can show date with mktime() to get a timestamp and date() to show month name.
echo date('M', mktime(0, 0, 0, $i, 1, 2014)).' -> '.$amount.'<br />';
}
HTML版本:
echo '<table>';
echo '<tr>';
for ( $i = 1 ; $i <= 12 ; $i++ )
echo '<th>'.date('M', mktime(0, 0, 0, $i, 1, 2014)).'</th>';
echo '</tr>';
echo '<tr>';
for ( $i = 1 ; $i <= 12 ; $i++ )
echo '<td>'.(!empty($monthsList[$i]) ? $monthsList[$i] : 0).'</td>';
echo '</tr>';
echo '</table>';
答案 2 :(得分:1)
$lst_amount = array();
foreach ($arr_year_2014 as $arr_month)
$lst_amount[$arr_month["month"]] = $arr_month["amount"];
// Output
foreach (range(1, 12) as $month)
echo empty($lst_amount[$month]) ? 0 . ' ' : $lst_amount[$month] . ' ';
// Output as HTML table
$html = "<table>\n<tr>\n";
foreach (range(1, 12) as $month) {
$monthName = date('M', mktime(0, 0, 0, $month, 10));
$html .= "<th>$monthName</th>\n";
}
$html .= "</tr>\n<tr>\n";
foreach (range(1, 12) as $month) {
$amount = empty($lst_amount[$month]) ? 0 : $lst_amount[$month];
$html .= "<td>$amount</td>\n";
}
$html .= "</tr>\n</table>\n";
echo $html;
答案 3 :(得分:0)
分选
<?php
function cmp($a, $b)
{
return $a['month'] > $b['month'];
}
//$data = your array
usort($data, "cmp");
foreach ($data as $value) {
echo $value['amount'];
}
?>
答案 4 :(得分:0)
您希望遍历每个数字月份(1 - 12),并检查阵列中的任何节点是否具有该月份。所以在伪代码中:
for ( months ) { // 1 through 12
for ( each node in year_array ) {
if ( month == currentMonth ) {
print value of month
}
else
print 0
}
}
}
答案 5 :(得分:-1)
为月份创建静态数组
$months = array('1'=>'Jan','2'=>'Feb',.....'12'=>'Dec');
然后循环使用foreach
$num_months = array_keys($months);
foreach($year_array as $key => $amount_array)
{
if(in_array($amount_array['month']),$num_months)
echo $amount_array['amount'];
else
echo "0";
}
希望这有帮助。