如何根据PHP中的键值回显数组中的值

时间:2014-08-11 07:46:48

标签: php arrays codeigniter

请帮我这个阵列打印。

阵列

 [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

Result eg.

即如果一个月不存在那么价值必须为零,我需要整整十二个月。

亲爱的好心,请帮助我得到这个结果。

一些背景

项目是在codeigniter中完成的,我已经搞了一些for foreach但是它没有工作。

谢谢。

6 个答案:

答案 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_mapforeach的效果相同,在这里可能会有些过分,但效果也很好。

答案 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 />';
}
  • mktime()将显示所选月份的时间戳。
  • date()与param&#39; M&#39;将显示3个字符的月份名称:Jan,Feb ...

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 . '&nbsp;' : $lst_amount[$month] . '&nbsp;';

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

希望这有帮助。