2013-03-07 128 views
0

我知道我的問題的標題可能令人困惑,但我不太清楚如何解釋我想要做的簡潔。在foreach循環中聲明不同的變量

我想通過一個CSV數組循環,並將數據加載到具有不同名稱的變量中。在下面的示例中,不是$foo_data而是通過$stocks陣列的每個循環中的$MSFT_data,$AAPL_data$FB_data

$stocks = array($msft, $aapl, $fb); 

foreach ($stocks as $stock) { 
    $fh = fopen($stock, 'r'); 
    $header = fgetcsv($fh); 

    $foo_data = array(); 
    while ($line = fgetcsv($fh)) { 
     $foo_data[] = array_combine($header, $line); 
    } 

    fclose($fh); 
} 

如果您需要更多信息,請讓我知道。

+1

什麼錯誤?問題是什麼? – 2013-03-07 07:53:18

+0

爲什麼不使用2D陣列? '$ stock_data [$ stock] [] = array_combine($ header,$ line);' – Johnsyweb 2013-03-07 07:53:21

+0

我嘗試在每個循環中通過foreach在我的示例中將數據保存到不同名稱的變量。 – 585connor 2013-03-07 07:55:00

回答

2

有兩個問題。首先是你不能得到變量名,所以腳本無法知道有一個$msft,$aapl,$fb,所以你需要傳遞名稱與數組一起。第二個是你需要變量變量。

嘗試

$stocks = array('MSFT' => $msft, 'AAPL' => $aapl, 'FB' => $fb); 
foreach ($stocks as $key=>$stock) { 
    $fh = fopen($stock, 'r'); 
    $header = fgetcsv($fh); 

    $varname = $key . '_data'; 

    $$varname = array(); //the double $$ will set the var content as variable ($MSFT_data) 
    while ($line = fgetcsv($fh)) { 
     ${$varname}[] = array_combine($header, $line); 

     //the {} are needed to let PHP know that $varname is the name of the variable and not $varname[]. 
    } 

    fclose($fh); 
} 
+0

我得到錯誤「致命錯誤:不能使用[]讀取''$$ varname [] = array_combine($ header,$ line)';' – 585connor 2013-03-07 08:13:53

+0

我忘記在$ varname周圍添加'{}'。 – 2013-03-07 08:36:57

0
$MSFT_data = $foo_data[0]; 
$AAPL_data = $foo_data[1]; 
$FB_data = $foo_data[2]; 

這對您有什麼用?