gpt4 book ai didi

PHP 枚举层次结构

转载 作者:可可西里 更新时间:2023-10-31 23:38:09 25 4
gpt4 key购买 nike

我想为我的 PHP 应用程序创建分层枚举并想到类似的事情

abstract class User_Roles extends Enum {

const Administrator = "";
const Account_Manager = "Administrator";
const BlogAuthor = "Account_Manager";
const CommentManager = "Account_Manager";

}

我正在使用这个枚举类:SO

所以每个 child 都有他的父节点作为它的值(value)。

我会这样做:

    $constants = $reflector->getConstants();
foreach ($constants as $key => $value) {
if ($value == "") {
$returnHierarchy[$key] = array();
continue;
}
$returnHierarchy[][$value] = $key;
}

但是我想创建的多维数组有一些问题。

所以它应该是这样的:

[Administrator]
{
[Account_Manager]
{
[BlogAuthor]
[CommentManager]
}
}

但我最终会遇到这样的事情:

array(4) (
[Administrator] => array(0)
[0] => array(1) (
[Administrator] => (string) Account_Manager
)
[1] => array(1) (
[Account_Manager] => (string) BlogAuthor
)
[2] => array(1) (
[Account_Manager] => (string) CommentManager
)
)

有什么我误解或忽略的地方吗?

最佳答案

如果你的 $value 角色已经存在,你必须遍历 $contstants 并在你的 $returnHierarchy 中搜索 append if no create new

要在数组中搜索,您必须使用递归函数,它将返回匹配的子数组索引引用

// IMPORTANT: it return reference function mae mast start with &
function &searchKeyInArray($key, &$array){

$matchedArrayReffarance = null;

if( !isset($array[$key]) ){

foreach ($array as &$sub){

if(is_array($sub)){
$matchedArrayReffarance = &searchKeyInArray($key, $sub);
}
}
}else{
$matchedArrayReffarance = &$array;
}

return $matchedArrayReffarance;
}

然后简单地使用上面定义的 searchKeyInArray 你可以实现你正在寻找的东西

$returnHierarchy = array();
// This is example, in your case it is: $constants = $reflector->getConstants();
$constants = array(
'Administrator' => "",
'Account_Manager' => "Administrator",
'BlogAuthor' => "Account_Manager",
'CommentManager' => "Account_Manager",
);

foreach ($constants as $key => $value) {

$matchArray = &searchKeyInArray($value, $returnHierarchy);

if( isset($matchArray) ){
$matchArray[$value][$key] = array();
}else{
$returnHierarchy[$key] = array();
}
}

var_dump($returnHierarchy);

$returnHierarchy 的 var_dump 将是

array(1) { 
["Administrator"]=> &array(1) {
["Account_Manager"]=> array(2) {
["BlogAuthor"]=> array(0) { }
["CommentManager"]=> array(0) { }
}
}
}

关于PHP 枚举层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com