2013-10-02 96 views
0

我是PHP新手。我想根據for循環條件值生成變量名稱。這是我的代碼。PHP - 字符串連接產生模式

<?php 
    for ($i = 1; $i < $totalcolumns; $i++) 
{ 
    $pattern1 .= '\$'.'a'.$i''; 
} 
$pattern = str_repeat ('%d', $totalcolumns); 

根據上面的代碼,我已經定義了$ pattern來根據totalcolumns的值生成%d。 $ pattern部分在下面的循環中完美無缺。

while (fscanf ($file,'\''.$pattern.'\'','\''.$pattern1.'\'')) 

因此,如果例如我的totalcolumns值是3,則上面的while循環應該如下展開。

while (fscanf ($file,'%d%d%d',$a1,$a2,$a3)) 

模式正在正確擴展,我使用echo語句進行了檢查。但是,如果我包含用於生成pattern1的代碼,我的程序不會生成任何輸出。

我正在嘗試使用變量pattern1生成模式$ a1,$ a2,$ a3。我正在使用PHP的字符串連接,但我無法在屏幕中看到任何輸出。有人能指導我在正確的方向嗎?

+0

你在哪裏打印輸出 – zod

+0

我在定義$模式值後打印它。但是,如果我嘗試打印$ pattern1沒有得到任何輸出。 –

+1

看起來你正在嘗試創建變量變量。也許這會幫助http://php.net/manual/en/language.variables.variable.php。 – PHPglue

回答

2

可能是試試這個:

<?php 
// You probably might have code here to populate $totalcolumns . 
// For test purpose I assumed a value . 
    $totalcolumns = 3; 

// Initialize $pattern1 
    $pattern1 = ''; 
// Make sure weather you need $i < $totalcolumns or $i <= $totalcolumns 
    for ($i = 1; $i < $totalcolumns; $i++) 
    { 
    // Your line was $pattern1 .= '\$'.'a'.$i''; which has systax error due to two single quotes before the semicolon 
     $pattern1 .= '\$'.'a'.$i; 
    } 
    echo $pattern1; 

將輸出:以上

\$a1\$a2 

回答您的(實際)問題。但似乎您需要調用具有可變數量參數的函數。如果是這種情況call_user_func_array可以幫助你的東西沿着這些路線:

call_user_func_array
Variable variables
How to pass variable number of arguments to a PHP function

<?php 
// You probably might have code here to populate $totalcolumns . 
// For test purpose I assumed a value . 
    $totalcolumns = 3; 

// Also assuming some values for $a1, $a2, $a3 etc. 
    $a1 = 'abc'; 
    $a2 = 'pqr'; 
    $a3 = 'xyz'; 

// For test purpose I used a string replace it with the actual file handle 
    $file = 'File handle'; 

// Initialize $pattern 
    $pattern = ''; 

// Define an array to hold parameters for call_user_func_array 
    $parameterArray = array(); 

// Put first parameter of fscanf at index 0 of $parameterArray 
    $parameterArray[0] = $file; 

// Initialize second parameter of fscanf at index 1 of $parameterArray 
    $parameterArray[1] = $pattern; 

    $parameterArrayIndex = 2; 
    for ($i = 0; $i < $totalcolumns; $i++) 
    { 
     $pattern .= '%d'; 
     $parameterArray[$parameterArrayIndex] = ${"a".($i+1)}; // Variable variables 
     $parameterArrayIndex++; 
    } 

// Update second parameter of fscanf at index 1 of $parameterArray 
    $parameterArray[1] = $pattern; 

    var_dump($parameterArray); 

    while(call_user_func_array('fscanf', $parameterArray)) 
    { 
     // Do what ever you need to do here 
    } 
0
<?php 
$totalcolumns = 3 
for ($i = 1; $i <= $totalcolumns; $i++){ 
    $pattern1 .= '$a' . $i . ', '; 
} 
//remove the last comma and space. 
$pattern1 = rtrim($pattern1, ", "); 
echo $pattern1; 
//$a1, $a2, $a3 

充分基於: 「我試圖生成模式$ a1,$ a2,$ a3「

我很肯定你沒有必須避免在單引號中輸入美元($)。

「\ $」

「$」

然後,如果我想做一些與輸出

<?php 
$filledInString = str_replace('$a1', "REPLACED!", $pattern1); 
$filledInString = str_replace('$a3', "AGAIN!", $filledInString); 
echo $filledInString; 
//REPLACED!, $a2, AGAIN! 
?> 

或者你可能只是在尋找可變的變量,但也許這是你在做什麼。不知道,希望它幫助:-)