2016-01-01 49 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

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

相关问题