我刚刚开始学习php,这是我第一次接触关联array.我试图从最里面的数组 echo 一个特定值,但失败了.

这是我的数组-

define('TAX_RATES', array(
'Single' => array(
  'Rates' => array(10,12,22,24,32,35,37),
  'Ranges' => array(0,9700,39475,84200,160725,204100,510300),
  'MinTax' => array(0, 970,4543,14382,32748,46628,153798)
  ),
'Married_Jointly' => array(
  'Rates' => array(10,12,22,24,32,35,37),
  'Ranges' => array(0,19400,78950,168400,321450,408200,612350),
  'MinTax' => array(0, 1940,9086,28765,65497,93257,164709)
  ),
'Married_Separately' => array(
  'Rates' => array(10,12,22,24,32,35,37),
  'Ranges' => array(0,9700,39475,84200,160725,204100,306175),
  'MinTax' => array(0, 970,4543,14382.50,32748.50,46628.50,82354.75)
  ),
'Head_Household' => array(
  'Rates' => array(10,12,22,24,32,35,37),
  'Ranges' => array(0,13850,52850,84200,160700,204100,510300),
  'MinTax' => array(0, 1385,6065,12962,31322,45210,152380)
    )
  )
);

我必须运行一个Foreach循环来遍历‘Single’、‘Marted_Joonly’等状态以输出第一行,然后运行一个for循环来输出其余的行.输出应如下所示:

 Single
 Taxable Income Tax Rate
 $0 - $9700     10%
 $9701 - $39475 $970 + 12%
 .....

 Married_Jointly
 Taxable Income Tax Rate
 $0 - $19400    10%
 $19401 - $78950 $1940 + 12%
 .....

到目前为止,我try 过的代码如下:

$keys = array_keys(TAX_RATES);

  for($i = 0; $i < count(TAX_RATES); $i++){
    echo $keys[$i] . "<br>";
    echo "<table>";
    echo "<tr>";
    echo "<th> Taxable Income </th>";
    echo "<th> Tax Rate </th>";
    echo "</tr>";
    
    foreach(TAX_RATES[$keys[$i]] as $key => $value){
     
      echo "<tr>";
      echo "<td> $0 - $value[1] </td>";
      echo "<td> $value[0]% </td>";
      echo "</table> <br>";
    
    }
    
  }

这就是我得到的结果-

  Single
  Taxable Income    Tax Rate
   $0 - $12         10%
   $0 - $9700        0%
   ....
   Married_Jointly
   Taxable Income   Tax Rate
   $0 - $12         10%
   $0 - $19400      0%
   .....

我在迭代这样一个复杂的关联数组时遇到了困难,任何帮助都将不胜感激.

推荐答案

我建议您将表生成分解为可重复的部分.将业务逻辑与演示文稿分离是提高可读性和可维护性的好方法.

创建模板字符串,并在迭代时用数据填充它们.

我可能会美化数组声明,以便更容易地"观察".

define('TAX_RATES', [
    'Single' => [
        'Ranges' => [0,  9700, 39475, 84200, 160725, 204100, 510300],
        'MinTax' => [0,   970,  4543, 14382,  32748,  46628, 153798],
        'Rates'  => [10,   12,    22,    24,     32,     35,     37],
    ],
    'Married_Jointly' => [
        'Ranges' => [0, 19400, 78950, 168400, 321450, 408200, 612350],
        'MinTax' => [0,  1940,  9086,  28765,  65497,  93257, 164709],
        'Rates'  => [10,   12,    22,     24,     32,     35,     37],
    ],
    'Married_Separately' => [
        'Ranges' => [0, 9700, 39475,    84200,   160725,   204100,   306175],
        'MinTax' => [0,  970,  4543, 14382.50, 32748.50, 46628.50, 82354.75],
        'Rates'  => [10,  12,    22,       24,       32,       35,       37],
    ],
    'Head_Household' => [
        'Ranges' => [0, 13850, 52850, 84200, 160700, 204100, 510300],
        'MinTax' => [0,  1385,  6065, 12962,  31322,  45210, 152380],
        'Rates'  => [10,   12,    22,    24,     32,     35,     37],
    ]
]);

代码:(Demo -- click the eye icon to see the rendered html)

$tableTemplate = <<<TABLE
<h2>%s</h2>
<table border="1">
    <tr>
        <th>Taxable Income</th>
        <th>Tax Rate</th>
    </tr>
%s
</table>
TABLE;

$rowTemplate = <<<ROW
    <tr>
        <td>%s</td>
        <td>%s%d%%</td>
    </tr>
ROW;

foreach (TAX_RATES as $status => $data) {
    $rows = [];
    $count = count($data['Rates']);
    for ($i = 0; $i < $count; ++$i) {
        $rows[] = sprintf(
            $rowTemplate,
            isset($data['Ranges'][$i + 1])
                ? '$' . number_format($data['Ranges'][$i] + ($i ? 1 : 0)) . ' - $' . number_format($data['Ranges'][$i + 1])
                : "> $" . number_format($data['Ranges'][$i]),
            $data['MinTax'][$i] ? '$' . number_format($data['MinTax'][$i], 2) . ' + ' : '',
            $data['Rates'][$i]
        );
    }
    printf($tableTemplate, $status, implode("\n", $rows));
}

请注意,模板字符串中的文字%必须由另一个%进行"转义".否则,将变量字符串标记为%s,变量整数标记为%d,浮点数标记为%f.这是一个基本的概要,但是您可以使用printf()系列函数享受更多的格式化功能.(sprintf()printf()的"静默"版本,它只返回它的有效负载,而不是打印它.)

随心所欲地添加货币格式.

Php相关问答推荐

SQLSTATE [42S02]:找不到基表或视图:1146 Table eshop. sessions不存在'''

模型中的Laravel自定义查询字段

WooCommerce数量减号和加号图标未显示

根据未用于变体的产品属性隐藏WooCommerce发货方式

PHP -多维数组到一维数组

将SVG包含在另一个php生成的SVG中

从两个日期创建日期范围,然后为范围中的每个日期复制子数组

文件::Files()响应返回空对象数组

将可编辑的计费自定义字段添加到 WooCommerce 管理单个订单

在 WooCommerce 管理变量产品中启用其他变体图像

WooCommerce 有关新订单的附加邮箱通知,其中包含具体详细信息

Shopware 6 AuthControllerDecorator已弃用

Woocommerce的数量和价格条件

在WooCommerce我的账户单个订单页面中添加订单商品部分和按钮

Laravel auth()->id() 在生产服务器中不工作

为什么在解压缩具有混合字符串和 int 键的关联数组时出现错误消息无法使用位置参数...?

为什么在 phpunit 的开头测试 PHP_VERSION?

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)

Symfony 自定义注销

PHP - 如何获取发送到脚本的查询参数