【问题标题】:php convert stdClass object to arrayphp将stdClass对象转换为数组
【发布时间】:2011-11-08 10:12:05
【问题描述】:

任何人都可以解释为什么我可以让这个工作。
我想查询一个数组,看看当前登录的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 Object ( [userid] => 9 ) [27] => stdClass Object ( [userid] => 27 ) [98] => stdClass 对象 ( [userid] => 98 ) [203] => stdClass 对象 ( [userid] => 203 ) [252] => stdClass 对象 ( [userid] => 252 ) [5410] =>标准类对象 ( [userid] => 5410 ) )

如您所见,5410 在数组中,因此不应被拒绝访问。 提前感谢您的帮助。

【问题讨论】:

  • 这个变量/对象$USER, $CFG来自哪里?您必须将其转换为数组的对象有什么问题?
  • 您的object2array() 函数是多余的。将对象转换为(array) 具有相同的效果。
  • 你不是在说get_records_sql() 做了什么。也许你可以修改它,让它返回一个数组? $USER-&gt;id 是什么?此外,我不确定您是否可以在对象上执行foreach。此外,“5410”不在数组中,而是另一个stdObject,它拥有用户标识“5410”。那是有区别的。

标签: php arrays object stdclass


【解决方案1】:

因为5410 != stdClass Object ( [userid] =&gt; 5410 ) 如果你使用in_array()

由于您的数组键看起来与userid 相同,因此您只需改用isset($alloweduser[$USER-&gt;id])

【讨论】:

  • 还删除了函数:您的 object2array() 函数是多余的。将对象转换为 (array) 具有相同的效果。 – Rijk van Wel 2
  • @Codded 代替isset(),使用array_key_exists($USER-&gt;id,$alloweduser);
猜你喜欢
  • 2013-10-29
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
相关资源
最近更新 更多