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-のような最も遠い関係で終わる父に近い)義理の)、しかし私はまたリストが時間とともに追加されることを望みます。私の最初の考えは、配列で注文する必要があるので単に注文することでしたが、後日リレーションを追加することはできません(これが起こるかどうかは疑わしいですが、申し訳ありませんが安全です)。私が思いついた最善の解決策(私の頭の中では一見良いもののようです)は、リレーションの名前とこのような任意の「ソート」値の両方を保持する単純なPHPオブジェクトを作成することでしたnew Relation('Unknown', 0);。問題は、で配列を作成している間はオブジェクトをインスタンス化できないように見えることです。X => Yこれを書き込もうとすると構文エラーが発生するため、構文:

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

これが機能する方法、またはおそらくより良い解決策はありますか?この時点で、配列プッシュを使用して(ゲッターで)最初に要求されたときに配列を生成してから保存する必要があるようですが、適切にフォーマットされている方がよいでしょう。私は運が悪いのですか?

編集-明確にするために:現在、キーはデータベースに保存されている値として使用されています。本質的に、他の言語の列挙型として配列を使用しています。

4

2 に答える 2

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、...の場合は、省略できます。

于 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 に答える