Php 无法将对象切割为所需信息
我有一个配置,其中包含一个对象,其中包含有关我的系统的所有相关信息。其中一部分列出了系统中当前的所有等级:Php 无法将对象切割为所需信息,php,arrays,object,Php,Arrays,Object,我有一个配置,其中包含一个对象,其中包含有关我的系统的所有相关信息。其中一部分列出了系统中当前的所有等级: return (object) array( //User Ranks "Ranks" => (object) array( "Developer" => (object) array( //Admin, User, Banned, Deactivated, Pending Moderation, Pending Emai
return (object) array(
//User Ranks
"Ranks" => (object) array(
"Developer" => (object) array(
//Admin, User, Banned, Deactivated, Pending Moderation, Pending Email Activation
"AccountState" => "Admin",
//Page View Permission
"PagePermissions" => array(
"cadet/dashboard",
"admin/dashboard",
"admin/users"
),
"TaskPermissions" => array(
"BasicUserSearch",
"AdvancedUserSearch",
"GetRanks",
"EditUser"
)
),
"Staff" => (object) array(
"AccountState" => "Admin",
//Page View Permission
"PagePermissions" => array(
"cadet/dashboard",
"admin/dashboard",
"admin/users"
),
"TaskPermissions" => array(
"BasicUserSearch",
"AdvancedUserSearch"
)
)
)
);
我需要做的是将这个对象转换成一个简单的数组来返回AJAX调用。阵列必须如下所示:
(
"Developer" => array("AccountState" => "Admin),
"Staff" => array("AccountState" => "Admin)
)
我尝试使用以下代码执行此操作:
public function GetRanks(){
$LstRanks = (array)$this->config->Ranks;
for($i = 0; $i < count($LstRanks); $i++){
$LstRanks[$i] = array_column($LstRanks[$i], "AccountState");
}
return json_encode(["data" => 0, "ranks" => $LstRanks]);
}
这是我根据评论中的建议提出的解决方案。似乎我没有正确地将对象转换为数组。第一行返回null?这是什么意思?哪一行?”返回“?对不起,我忘记把错误信息放进去了。现在检查问题。很抱歉。您提供的代码有点难以理解这里发生了什么,但是如果您想要创建一个包含另一个数组的某些数据子集的数组,最简单的方法是迭代该数组(使用
forearch
)并将您想要的数据添加到一个新数组中。您正在做的事情似乎相当复杂。请尝试使用foreach($role=>lstrakes$options){foreach($options=>$value){//your logic}}}
,如果$value是数组,请继续使用foreach进行迭代。@arisaila主要问题是将对象转换为数组。一旦这样做了,我应该能够处理循环。
[30-Apr-2017 18:38:47 UTC] PHP Notice: Undefined offset: 0 in /home/thomassm/public_html/php/lib/UserSystem.php on line 23
[30-Apr-2017 18:38:47 UTC] PHP Warning: array_column() expects parameter 1 to be array, null given in /home/thomassm/public_html/php/lib/UserSystem.php on line 23
public function GetRanks(){
$Ranks = (array) $this->config->Ranks;
$LstRanks = array();
foreach($Ranks as $StrRank => $LstRankInfo){
$LstRanks[$StrRank] = $LstRankInfo->AccountState;
}
return json_encode(["data" => 0, "ranks" => $LstRanks]);
}