PHP将数组中的变量引用为foreach键

时间:2016-01-24 14:49:54

标签: php arrays foreach

我知道我的头衔很矛盾但是如果你忍受我,你会发现它并不是那么糟糕: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中的键(或者我的语法错误)。就像现在它只是说"未定义变量:年"

您对如何表达我的需求有什么想法吗?

2 个答案:

答案 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
           }
     }
}