我有以下代码:
function Biz_GetAccountsPerMarket($site = "", $cache = true){
if($site == ""){
$site = $_SESSION["sitedirect_current_site"];
}
$aAccounts = Sys_OptionsGet("sys_site/".$site, "account", $cache);
$aAccountInfo = array();
$aVatAccount = Biz_GetVatAccounts($site, $cache);
$aSalesAccount = Biz_GetSalesAccounts($site, $cache);
foreach((array)$aAccounts as $code => $data){
foreach((array)$data["data"] as $market => $aItem){
$aAccountInfo[$market][$code] = $aItem;
$aAccountInfo[$market][$code]["vat"] = $aVatAccount[$aItem["vat_account_code"]]["value"];
$aAccountInfo[$market][$code]["vat_account"] = $aVatAccount[$aItem["vat_account_code"]]["account"];
$aAccountInfo[$market][$code]["sales_account"] = $aSalesAccount[$aItem["sales_account_code"]]["account"];
}
}
return $aAccountInfo;
}
嵌套循环中的四条最里面的行会生成警告:"不能将标量值用作数组"。
添加初始化$aAccountInfo[$market]
和$aAccountInfo[$market][$code]
到空数组的行首先会使错误沉默,但这远远不是我们代码中以这种方式初始化嵌套数组的唯一地方。而且我无法弄清楚为什么它首先是一个问题。
以下代码应该重现问题;据我所知;但不是:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL | E_STRICT);
$aTest = [];
$aTest['key']['key'] = 'sausage';
如果$aItem
是字符串或假,或任何标量;我能理解问题是什么;但是警告应该只发生在最后三行,而不是全部四行。
还有其他奇怪的事情发生在那里,我希望他们全都联系在一起。这是我唯一能够孤立起来提出问题的人。
是否有可能以某种方式设置由数组访问创建的默认值?
编辑:
我注意到生成的许多字符串都有一个无关的&#34; 0&#34;。这打破了事情,比如SQL。如果空数组值以某种方式默认为&#34; 0&#34;或者什么,这可以解释很多。我不知道怎么会发生这种情况。我目前正在寻找&#34; register_tick_function&#34; ...
答案 0 :(得分:0)
您需要检查数组是否具有预期的键。像这样:
$aAccountInfo[$market][$code]["vat"] = isset($aItem["vat_account_code"]) ? (isset($aVatAccount[$aItem["vat_account_code"]]) ? $aVatAccount[$aItem["vat_account_code"]]["value"] : []) : [];
答案 1 :(得分:0)
我担心你的代码错了
这一行
$aAccountInfo[$market][$code] = $aItem;
创建包含SCALAR值的新出现,然后尝试将子数组添加到该标量值上,因此出现错误
如果你这样做
$t = array();
$t['item'] = $aItem;
$t["vat"] = $aVatAccount[$aItem["vat_account_code"]]["value"];
$t["vat_account"] = $aVatAccount[$aItem["vat_account_code"]]["account"];
$t["sales_account"] = $aSalesAccount[$aItem["sales_account_code"]]["account"];
$aAccountInfo[$market][$code] = $t;
然后你将得到一个包含其中所有值的子数组;