我知道我的头衔很矛盾但是如果你忍受我,你会发现它并不是那么糟糕:P
我有一个类方法,它以任何顺序获得完全不同的数据库字段,并根据这些字段构建一个数组(每个键在数组中添加另一个级别)。
现在,这很容易。我还有一个校正函数,统一例如一些人口统计数据的成本。问题是我需要在修正公式中找到正确的水平。
我试着举个例子:
我问字段A,年,B,C,D和D的校正公式取决于年份和C.我已经形式化,以便C和D总是最后列出的但是问题是我如何解决这一年,我可以得到像[A][year][B]=function(year,c,d)
这样的答案。字段位于数组($retr['fields']=array("A","year","B","C")
中(结果D自动出现)
我尝试使用像
这样的foreach $retr['fields']=array("A","year","B","C")
$temp=get_data($retr);
foreach($temp as $${$retr['fields'][0]} => $yd)
foreach ($yd as $${$retr['fields'][1]} => $cd) {
$output[$${$retr['fields'][0]}][$${$retr['fields'][1]}]=0;
foreach ($cd as $a => $v)
$output[$${$retr['fields'][0]}][$${$retr['fields'][1]}]+=$v*$act[$year][$a]
等等,但似乎不能将变量变量用作foreach中的键(或者我的语法错误)。就像现在它只是说"未定义变量:年"
您对如何表达我的需求有什么想法吗?
答案 0 :(得分:0)
嗯,我解决了它,或者说没有解决,只是编程。 对于每个foreach,我检查了相应的字段,如果是年份,我使用当前foreach键的值创建了一个变量,并用$$变量引用它。
像这样:
$temp=get_data($retr);
foreach($temp as $varA => $yd) {
if ($retr[0]=="year")
$year_var=varA;
.
.
.
$output[$varA][$varB]+=$v*$act[$$year_var][$a]
我仍然更喜欢更清洁的解决方案,但考虑到我的时间表(或者更确切地说是丢失它),这应该足够了。
我仍然对#34;完美解决方案"(TM)感兴趣
无论如何:)
答案 1 :(得分:0)
很难理解你的结构,但看起来你正在获取一些数据项,然后将它们分类为树状结构。
在这种情况下,即使特定属性(例如年份)出现在某个较高级别上,它仍然基本上是数据项本身的属性,因此请保持原样:转换"值"转换为非标量(对象或散列)。然后,您将能够使用这些属性而无需引用外部循环值(并且无需借助变量变量):
foreach($arr as $subarr) {
foreach ($subarr as $subsubarr) {
// ... and so on
foreach ($lastlevel as $value) {
$adjusted = correctionFunc($value->data, $value->year, $value->somethingelse); // assuming value is an object
}
}
}