2013-03-07 3 views
0

Я знаю, что название моего вопроса может быть запутанным, но я не совсем уверен, как объяснить, что я пытаюсь сделать в сжатом виде.Объявление переменных в цикле foreach

Я пытаюсь перебрать массив CSV и загрузить данные в переменные с разными именами. В моем примере ниже вместо $foo_data это было бы $MSFT_data, $AAPL_data и $FB_data в каждом цикле через массив $stocks.

$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

, что это ошибка? В чем проблема? –

+0

Почему бы не использовать 2D-массив? '$ stock_data [$ stock] [] = array_combine ($ header, $ line);' – Johnsyweb

+0

Я пытаюсь сохранить данные в переменной, именованной переменной, в каждом цикле через foreach в моем примере. – 585connor

ответ

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

+0

Я забыл добавить '{}' вокруг $ varname. –

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

Как это работает на вас?

Смежные вопросы