2016-01-24 25 views
0

我知道我的標題是相當矛盾的,但如果你負我,你會發現它並沒有那麼糟糕:PPHP中的數組的foreach鍵引用變量

我有一個類方法得到完全不同的數據庫字段,並根據這些字段構建一個數組(每個鍵都將另一個級別添加到數組中)。

現在,這是最簡單的部分。我還有一個校正功能,可以統一一些人口統計數據造成的成本。問題是我需要解決修正公式中的正確級別。

我試着做一個例子: 我問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

'$輸出[$$ {$ RETR [ '字段'] [0]}] [ $$ {$ retr ['fields'] [1]}] + = $ v * $ act [$ year] [$ a];' - 不知道您要在那裏做什麼。也許顯示更多的代碼可以幫助澄清一點嗎? –

+0

這是爲了使代碼更具可讀性。我嘗試返回一個數組,其中第一級關鍵字是字段A的值,第二級是年,並且該值是年份和最後兩個字段的函數。這將是非常容易的,如果一年總是第二級,但因爲它不是東西變得雜亂...... –

回答

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] 

我仍然希望有一個更清潔的解決方案,但給我的時間內(或者更確切地說,它的損失),這應該足夠了。

我在「完美解決方案」仍然有興趣(TM)

THX反正:)

0

這是一種很難理解你的結構,但它似乎你獲取一些數據項和然後將它們分類爲樹狀結構。

在這種情況下,即使某個特定屬性(例如year)出現在某個上層,它本質上仍然是該數據項本身的一個屬性,因此應如此保留:將「value」標量(對象或散列)。然後,你將能夠不參照外環值(以及不訴諸變量的變量)與這些屬性的工作:

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 
      } 
    } 
} 
+0

謝謝你的解決方案。我必須仔細研究一下。問題是這個值是從另一個低層調用中產生的,我想知道我是否可以填充它。但我稍後會看看它,這可能是我正在尋找的解決方案... –