2016-01-01 2 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); 

Я прочитал кое-что о неправильных имен переменных не будет работать с extract() в комментариях PHP.net.

+1

компактный ('вар', '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

Еще раз спасибо, он отлично работает! –

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