PHP конвертировать объект stdClass в массив - PullRequest
7 голосов
/ 01 сентября 2011

Может ли кто-нибудь пролить свет на то, почему я могу заставить это работать.
Я хочу запросить массив, чтобы увидеть, назначена ли для USER->id, который в данный момент вошел в систему, определенная роль:

$contextroles = get_records_sql("SELECT userid FROM {$CFG->prefix}role_assignments WHERE contextid = 23 AND roleid = 3");

function object2array($object) {
    if (is_object($object)) {
        foreach ($object as $key => $value) {
            $array[$key] = $value;
        }
    }
    else {
        $array = $object;
    }
    return $array;
}

$alloweduser = object2array($contextroles);

if (in_array($USER->id, $alloweduser)) {
    echo'Your in<br />';
    echo $USER->id.'<br />';
    print_r($alloweduser);
}
else{
    echo'<br />You do not have permission to acces this database.<br />';
    echo $USER->id.'<br />';
    print_r($alloweduser);
    exit;
}

В настоящее время я получаю этот вывод:

У вас нет прав доступа к этой базе данных.

5410

Array ([7] => stdClass Object([userid] => 7) [9] => объект stdClass ([userid] => 9) [27] => объект stdClass ([userid] => 27) [98] => объект stdClass ([userid] => 98) [203] => stdClass Object ([userid] => 203) [252] => stdClass Object ([userid] => 252) [5410] => stdClass Object ([userid] => 5410))

Как вы видите, 5410 находится в массиве, поэтому доступ к нему запрещен.Заранее спасибо за любую помощь.

1 Ответ

3 голосов
/ 01 сентября 2011

Потому что 5410 != stdClass Object ( [userid] => 5410 ), если вы используете in_array().

Поскольку ваш ключ массива выглядит так же, как и userid, вы просто используете isset($alloweduser[$USER->id]) вместо.

...