0

私はこのようなコードを持っています:

$something_type = $this->db
    ->where('something_type_id', $something->something_type_id)
    ->get('something_types')
    ->row();
if(!$something_type) {
  $something->type = lang('data_not_specified');
} else {
  $something->type = $something_type->something_type_name;
}

// everything is exactly the same here except for one word
$something_category = $this->db
    ->where('something_category_id', $something->something_category_id)
    ->get('something_categories')
    ->row();
if(!$something_category) {
  $something->category = lang('data_not_specified');
} else {
  $something->category = $something_category->something_category_name;
}

...

// and so on, about four times

私が考えた解決策の1つは次のとおりです。

$classfications = array('type', 'category');
foreach ($classifications as $classification) {
  $id_property = "something_{$classificiation}_id";
  $something_classification = $this->db
      ->where("something_{$classification}_id", $something->$id_property)
      ->get("something_{$classification}s")
      ->row();
  if(!$something_classification) {
    $something->$classification = lang('data_not_specified');
  } else {
    $name_property = "something_{$classificiation}_name";
    $something->$classification = $something_classification->$name_property;
  }  
}

もちろん、それを読むとおそらく誰かがフィットする結果になるでしょう、それで私はこれについて何をしますか?これはおそらく非常に一般的な問題ですが、名前を付けることができないため、グーグルで問題が発生します。

4

1 に答える 1

1

屈折をお探しですか?

質問のコード スニペットの最大の課題は、提供した分類の複数形が異なることです (たとえば、「タイプ」は「タイプ」になり、「カテゴリ」は「カテゴリ」になります)。このデータを変化させずに構造化するために、ネストされた配列ハッシュを作成できます。

$classifications = array(
  'type' => array(
    'plural' => 'something_types',
    'id'    => 'something_type_id',
  ),
  // etc.
);

foreach ($classifications as $singular => $data) {
  /*
   * Produces:
   * $singluar = 'type';
   * $data['plural'] = 'something_types';
   * $data['id'] = 'something_type_id';
   */
}

ただし、私が使用したほとんどの PHP フレームワークには、単数形と複数形の名前を一緒に使用することを問題にする言語のニュアンスを処理するためのInflectorクラス (または類似のもの) が含まれています (上記のように、ネストされたデータ構造の必要性を回避します)。

CodeIgniter の Inflector Helperを見て、これが何を意味するかを理解してください。すでにフレームワークを使用している場合 (ヘルパーを使用していると思われます)、この種のシナリオを自動的に処理するORM$dbをサポートしているかどうかも確認してください。

于 2012-12-09T21:09:38.537 に答える