2016-01-01 76 views
0

我有一個從表中獲取數據的函數,並且有多個列(變量)。我需要返回函數中的所有變量才能使用它們。返回多個變量作爲數組並提取它們

我試過多種方法,但我不能讓它工作:

return array($var, $var2, $var3, $etc); 

return compact($var, $var2, $var3, $etc); 

現在我用extract()但我做錯了什麼:

$data = $functions->my_function($id); 

// I must check first if there are results 
// will this work? 
if (is_array($data)) { 
    extract($data); 
    // now I can use the variables from the function: 
    echo $var, $var2, $var3, $etc; 
} 

相反的聲明變量一個接一個:

$var = $data[0]; 
$var2 = $data[1]; 

也許問題是變量名?

$stmt->bind_result($id, $use, $type, $status, $bhk, $baths, $area_1, $area_2, $city, $zone, $sale_price, $monthly_price, $description); 

我讀一些有關錯誤的變量名稱將不會在php.net意見extract()工作。

+1

緊湊( 'var' 或 'VAR2', 'VAR3',「等); – splash58

+0

謝謝你的工作! –

回答

1

您的extract不工作的原因是因爲您需要退回associative array。您可以手動做到這一點,或者你可以通過變量名,不是變量值使用compact正確:

function my_function() { 
    $var = 'Happy'; 
    $var2 = 'New'; 
    $var3 = 'Year'; 
    return array(
     'var' => $var, 
     'var2' => $var2, 
     'var3' => $var3 
     // ... etc ... 
    ); 
    // Alternate method, with compact 
    return compact('var', 'var2', 'var3'); 
} 

$values = my_function(); 
extract($values); 
echo $var; // outputs 'Happy' 
echo $var2; // outputs 'New' 
echo $var3; // outputs 'Year' 

編輯
提取物是不是最好的做法。在閱讀代碼時,變量突然出現的地方是一個謎,並且更難以維護。

更好的將是檢查/從陣列中明確的將值:

$values = my_function(); 
$var = $values['var']; 
$var2 = $values['var2']; 
$var3 = $values['var3']; 
echo $var; // outputs 'Happy' 
echo $var1; // outputs 'New' 
echo $var3; // outputs 'Year' 

根據您的代碼的結構,你必須決定你是否能依賴於函數總是返回的值,或者如果你需要檢查它們。如果您需要檢查多個鍵/值,然後我通常喜歡寫那種事情效用函數:

function get_val($key, $array, $default = FALSE) { 
    $array = (array)$array; 
    return (isset($array[ $key ])) ? $array[ $key ] : $default; 
} 

然後,您可以使用它像這樣:

$values = my_function(); 
$var = get_val('var', $values); 
$var2 = get_val('var2', $values); 
$var3 = get_val('var3', $values); 
echo $var; // outputs 'Happy' 
echo $var1; // outputs 'New' 
echo $var3; // outputs 'Year' 

最後,你的函數返回數據庫中的行應該是負責做驗證/返回有意義的東西。例如,如果沒有行,則返回FALSE,那麼你可以檢查像這樣:

function my_function($id) { 
    // your code to get the row based on the id 

    // then, check that a row was returned... 
    if (! count($row)) { 
      return FALSE; 
    } else { 
      // return the row 
    } 
} 

$values = my_function(); 
if ($values !== FALSE) { 
    // do stuff, because we know we have a valid row 
} 
+0

謝謝!我該怎麼做檢查?使用'num_rows'的函數內部還是有另一種簡單的方法? –

+0

再次感謝,它效果很好! –

相關問題