我在PHP中有一个只是字符串的数组。这些字符串表示可以在不同家庭距离之间发生的关系。它看起来像这样:
0 => 'Unknown',
1 => 'Parent',
2 => 'Grandparent',
3 => 'Sibling',
4 => 'Child',
5 => 'Grandchild',
6 => 'Spouse',
7 => 'Self',
9 => 'Step Parent',
10 => 'Step Sibling',
11 => 'Step Child',
etc...
这个阵列效果很好,但是我遇到了一个问题,我希望能够以纯粹的自定义方式对这些项目进行排序(特别是从Spouse / Sibling开始,以最遥远的关系结束,更接近父亲)像X-in-law一样,但我也希望随着时间的推移添加列表。我最初的想法是简单地对它们进行排序,因为它们需要在数组中进行排序,但这不允许我在以后添加关系(尽管这种情况可能会发生,但我宁愿安全而不是抱歉)。我能想到的最好的解决方案(在我看来似乎是一个好的解决方案)是创建一个简单的PHP对象,它既包含关系的名称,又包含任意“排序”值,如new Relation('Unknown', 0);
。问题是,在使用X => Y
语法创建数组时,似乎无法实例化对象,因为当我尝试编写此语法时出现语法错误:
0 => new Relation('Unknown', 0),
1 => new Relation('Grandparent', 1),
etc...
有没有办法可以起作用或者可能是更好的解决方案?在这一点上,我可能必须在第一次使用数组推送(在getter中)生成数组时使用数组推送然后存储它,但我宁愿让它很好地格式化。我只是运气不好吗?
编辑 - 澄清:现在的密钥被用作数据库中的存储值。实质上,我们将数组用作其他语言的枚举。
答案 0 :(得分:1)
你可以在数组中写这个。如果你在类属性中写了这个,那么语法错误会发生什么。
你不能这样做:
class A {
public $relations = array(
0 => new Relation('Unknown', 0),
1 => new Relation('Grandparent', 1)
);
}
但你可以在构造函数中执行init。
class A {
public $relations;
public function __construct() {
$this->relations = array(
0 => new Relation('Unknown', 0),
1 => new Relation('Grandparent', 1)
);
}
}
PS: 如果按键只是0,1,......你可以省略它们。
答案 1 :(得分:1)
将数组用作地图,例如relationship_name => relationship_distance。如果更方便,你可以做relationship_distance => relationship_name。使relationship_distance值任意,中间有间隙,以便稍后可以添加中间距离。例如:
'Sibling' => 1,
'Parent' => 10,
'Grandparent' => 20,
'Greatgrandparent' => 30,
'Uncle' => 13,
'BrotherInLaw' => 17,
然后,您可以按键或值对地图进行排序,并根据需要添加新条目。