PHP7.1-从sql查询构建关联多维数组
我有一个sql server表,如下所示: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%
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数组不是必需的,但因为它不起作用。。也使用旧符号进行测试。。您的解决方案更紧凑,虽然可以避免进一步的行,但这对我来说也很容易。因为字段很少,所以这个解决方案在这个例子中是可以的,但是如果有大量的字段并且想要避免硬编码索引呢?前面的答案很清楚。。为此,我们必须学习很多东西,但它是有效的。