0

我在 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...

这个数组很好用,但是我遇到了一个问题,我希望能够以纯粹的自定义方式对这些项目进行排序(特别是从配偶/兄弟姐妹开始,以最远的关系结束,例如 X- in-law),但我也希望随着时间的推移添加列表。我最初的想法是简单地对它们进行排序,因为它们需要在数组中进行排序,但这不允许我在以后添加关系(尽管我怀疑这是否会发生,我宁愿安全也不要抱歉)。我能想出的最佳解决方案(在我看来似乎是一个不错的解决方案)是制作一个简单的 PHP 对象,该对象将包含关系的名称和像这样的任意“排序”值new Relation('Unknown', 0);。问题是,您似乎无法在使用X => Y语法,因为我在尝试编写此代码时遇到语法错误:

    0 => new Relation('Unknown', 0),
    1 => new Relation('Grandparent', 1),
    etc...

有没有办法可以工作或可能是更好的解决方案?在这一点上,我可能必须在第一次请求它时(在 getter 中)使用 Array pushes 生成数组,然后存储它,但我宁愿让它格式化得很好。我只是运气不好?

编辑 - 澄清:现在的键被用作数据库中的存储值。本质上,我们将数组用作其他语言的枚举。

4

2 回答 2

1

You could write this in a array. What happens to be a syntax error is if you wrote that in a class property.

You can't do this:

class A {
  public $relations = array(
    0 => new Relation('Unknown', 0),
    1 => new Relation('Grandparent', 1)
  );
}

But you could do the init in the constructor.

class A {
   public $relations;
   public function __construct() {
      $this->relations = array(
         0 => new Relation('Unknown', 0),
         1 => new Relation('Grandparent', 1)
      );
   }
}

PS: if the keys is just 0,1,... you could omit them.

于 2012-07-10T02:51:05.610 回答
1

使用数组作为映射,例如relationship_name => relationship_distance。如果更方便,可以做relationship_distance => relationship_name。使relationship_distance值任意,中间有间隙,以便以后可以添加中间距离。例如:

'Sibling' => 1,
'Parent' => 10,
'Grandparent' => 20,
'Greatgrandparent' => 30,
'Uncle' => 13,
'BrotherInLaw' => 17,

然后,您可以按键或值对地图进行排序,并根据需要添加新条目。

于 2012-07-10T03:08:00.330 回答