PHP7.1-从sql查询构建关联多维数组

PHP7.1-从sql查询构建关联多维数组,php,arrays,sql-server,multidimensional-array,Php,Arrays,Sql Server,Multidimensional Array,我有一个sql server表,如下所示: VatCode | VATRate | Description | Active 00 0 VAT Rate 0.00% 1 04 4 VAT Rate 4.00% 1 06 6 VAT Rate 6.00%

我有一个sql server表,如下所示:

VatCode     |   VATRate     |   Description         |  Active
00              0               VAT Rate 0.00%        1
04              4               VAT Rate 4.00%        1
06              6               VAT Rate 6.00%        1
...
21              21              VAT Rate 21.00%       1
....
$VATTable = array
(
    '04'=> array(
        'VATRate'=>'4',
        'Desc'=>'VAT 4.00%',
        'Goods'=>0,
        'eFees'=>0,
        'pFees'=>0,
        'sFees'=>0,
        'Taxable'=>0,
        'VAT'=>0,
        'Total'=>0          
    ),
    '06'=> array(
        'VATRate'=>'06',
        'Desc'=>'VAT 6.00%',
        'Goods'=>0,
        'eFees'=>0,
        'pFees'=>0,
        'sFees'=>0,
        'Taxable'=>0,
        'VAT'=>0,
        'Total'=>0          
    ),
    '10'=> array(
        'VATRate'=>'10',
        'Desc'=>'VAT 10.00%',
        'Goods'=>0,
        'eFees'=>0,
        'pFees'=>0,
        'sFees'=>0,
        'Taxable'=>0,
        'VAT'=>0,
        'Total'=>0          
    )
);
有了这个疑问

$query = "SELECT VatCode, VatRate, Description, 0 as Goods, 0 as eFees, 0 as pFees, 0 as sFees, 0 as VAT, 0 as Total from VATTable where active=1";
$result = sqlsrv_query($conn,$query);
我需要用这些数据构建一个多维数组,如下所示:

VatCode     |   VATRate     |   Description         |  Active
00              0               VAT Rate 0.00%        1
04              4               VAT Rate 4.00%        1
06              6               VAT Rate 6.00%        1
...
21              21              VAT Rate 21.00%       1
....
$VATTable = array
(
    '04'=> array(
        'VATRate'=>'4',
        'Desc'=>'VAT 4.00%',
        'Goods'=>0,
        'eFees'=>0,
        'pFees'=>0,
        'sFees'=>0,
        'Taxable'=>0,
        'VAT'=>0,
        'Total'=>0          
    ),
    '06'=> array(
        'VATRate'=>'06',
        'Desc'=>'VAT 6.00%',
        'Goods'=>0,
        'eFees'=>0,
        'pFees'=>0,
        'sFees'=>0,
        'Taxable'=>0,
        'VAT'=>0,
        'Total'=>0          
    ),
    '10'=> array(
        'VATRate'=>'10',
        'Desc'=>'VAT 10.00%',
        'Goods'=>0,
        'eFees'=>0,
        'pFees'=>0,
        'sFees'=>0,
        'Taxable'=>0,
        'VAT'=>0,
        'Total'=>0          
    )
);
因此,我们可以通过以下方式对其进行管理:

$vatCode='10';
$VATTable[$vatCode]['Goods']=15;
echo $VATTable[$vatCode]['Desc'].': '.$VATTable[$vatCode]['Goods'];
虽然我的php知识很差,但我认为我必须先构建内部数组,然后使用array_push将其添加到VATTable数组中,但是在搜索此类解决方案时, 我发现了一些例子,我理解(??)在获取记录集时可能可以这样做,我想我可以这样做: $VATTable=数组()

但它不起作用

你能提出解决办法吗

谢谢

这应该可以:

while($row = sqlsrv_fetch_array($result)) {
   $id = $row['VATCode'];
   $VATTable[$id] = [
      'VATRate' => $row['VATRate'],
      'Desc' => $row['Description'],
      'Goods' => $row['Goods'],
}

print_r($VATTable);
另外,在php7中不需要“array”这个词。 你可以用

$VATTable[$id] = [ ... ]
而不是

$VATTable[$id] = array( ... );
如果不想硬编码索引,请执行以下操作:

while($row = sqlsrv_fetch_array($result)) {
   $id = $row['VATCode'];
   $VATTable[$id] = $row;
   unset($VATTable[$id]['VATCode']);
}

现在$VATTable包含多维数组

是的,两者都很好,但是如何避免硬编码索引和任意数量的字段呢?是的,SEED数组不是必需的,但因为它不起作用。。也使用旧符号进行测试。。您的解决方案更紧凑,虽然可以避免进一步的行,但这对我来说也很容易。因为字段很少,所以这个解决方案在这个例子中是可以的,但是如果有大量的字段并且想要避免硬编码索引呢?前面的答案很清楚。。为此,我们必须学习很多东西,但它是有效的。