繁体   English   中英

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

[英]How to echo value from an array in according to a key value in PHP

请帮助我进行此阵列打印。

数组

 [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中完成的,我已经为foreach搞砸了一些,但是没有用。

谢谢。

只需尝试:

$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值。

foreachyear_2014数据数组上循环,并将项目的金额设置为month - 1位置。

array_mapforeach一样,在这里可能是一个过大的array_map ,但效果很好。

您可以每月循环:

$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()将显示选定月份的时间戳。
  • 带有参数“ M”的date()将以3个字符显示月份名称:1月,2月...

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>';
$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;

排序:

<?php
function cmp($a, $b)
{
    return $a['month'] > $b['month'];
}

//$data  = your array
usort($data, "cmp");

foreach ($data as $value) {
    echo $value['amount'];
}
?>

您要遍历每个数字月份(1-12),并检查数组中是否有任何节点具有该月份。 所以在伪代码中:

for ( months ) { // 1 through 12
  for ( each node in year_array ) {
    if ( month == currentMonth ) {
      print value of month
    }
    else
      print 0
    }
  }
}

为月份创建静态数组为

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM