перенес рабочий режим на работу, сейчас результатов нет - PullRequest
0 голосов
/ 09 октября 2018

Когда я пытаюсь консолидировать свой код и сделать его более доступным для других проектов, я столкнулся с проблемой: переменные, которые были сгенерированы и доступны, больше не переносятся, когда эта подпрограмма перемещается в функцию: это запрос:

$count = "SELECT eid, Count, Name, name2, Email, pay FROM h2018";

ЭТО РАБОТАЕТ FINE:

$result = $mysqli->query($count);
$row = $result->fetch_assoc();
foreach($row as $key=>$value){
    $a = $key;
    $$key = $value;
    echo($a." and ".$value."<BR>");
}

NOT WORKING FINE:

function avar($result) {
$row = $result->fetch_assoc();
    foreach($row as $key=>$value){
        $a = $key;
        $$key = $value;
    }
}


$result = $mysqli->query($count);
avar($result);
echo($a." and ".$value."<BR>");

Я думал, что переменные переменные будут доступны вне функции.Я пытался сделать возврат, но это не помогло.Я также попытался использовать глобальный ключ $$, но это тоже не сработало.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Пожалуйста, прочитайте документацию PHP о Переменная Область для получения дополнительной информации.Переменные внутри вашей функции являются локальными, поэтому вы не можете получить к ним доступ вне вашей функции.Вам придется что-то вернуть.

Например, это может сработать:

function avar($result) {
    $resultArray = false;
    $row = $result->fetch_assoc();

    foreach ($row as $key => $value) {
        $resultArray = [
            'key' => $key,
            'value' => $value
        ];
    }

    return $resultArray;
}


$result = $mysqli->query($count);
$queryResult = avar($result);

if ($queryResult) {
    echo 'Key: ' . $queryResult['key'] . ' | Value: ' . $queryResult['value'];
}

Обратите внимание, что fetch_assoc вернет array с несколькими элементами, если их большеодин результат.В моем примере будет возвращен только один (и последний) результат.

Редактировать: Как сказал @Nigel Ren в своем комментарии.В этом случае вы в основном перестраиваете массив, который будет выглядеть (почти) так же, как массив, возвращаемый fetch_assoc, что бессмысленно.Моя функция может быть использована, если вы хотите добавить условия в будущем или манипулировать некоторыми данными.В противном случае, не используйте функцию, а просто используйте результаты из fetch_assoc.

0 голосов
/ 09 октября 2018

Существует несколько ошибок или пропущенных шагов, таких как return или array

function avar($result) {
$data=array();
$row = $result->fetch_assoc();
    foreach($row as $key=>$value){
        $a = $key;
        $data[$key] = $value;//if there is multiple records then used array otherwise you should used variable 
    }
return $data;
}


$result = $mysqli->query($count);
$data=avar($result);//get return value
print_r($data);
...