9

この配列の「不正なオフセットタイプ」を取得しています。

public static $CATS_AND_TYPES = array(

        // Statement Administration
        array( self::CAT_STATEMENT_ADMIN => "Document Administration" ) => array(
            self::TYPE_STATEMENTS_LOADED => "Documents Loaded",
            self::TYPE_STATEMENTS_REMOVED => "Documents Removed"
        ),

        // Cron Jobs
        array( self::CAT_CRON_JOBS => "Cron Jobs" ) => array(
            self::TYPE_CRON_BULLETIN_RUN => "Bulletin Cron Job Ran",
            self::TYPE_CRON_EMAILER_RUN => "Emailer Cron Job Ran",
            self::TYPE_CRON_SURVEY_RUN => "Survey Cron Job Ran",
            self::TYPE_CRON_JOURNEY_RUN => "Journey Cron Job Ran",
            self::TYPE_CRON_DOCUMENT_RUN => "Document Cron Job Ran"
        ),

        // Global Administration
        array( self::CAT_GLOBAL_ADMIN => "Global Administration" ) => array(
            self::TYPE_GLOBAL_MAINTENANCE => "Global Maintenance",
            self::TYPE_GLOBAL_EMAIL_SENDING => "Email Sending"
        ),

        // Email Administration
        array( self::CAT_EMAIL_ADMIN => "Email Administration" ) => array(
            self::TYPE_EMAIL_SENT => "Email Sent",
            self::TYPE_EMAIL_RESENT => "Email Resent",
            self::TYPE_EMAIL_REMOVED => "Email Removed"
        ),

        // DCVs Administration
        array( self::CAT_DCVS_ADMIN => "DCVs Administration" ) => array(
            self::TYPE_DCVS_FLEX_UPDATED => "Flexible Variables Updated",
            self::TYPE_DCVS_GLOBAL_UPDATED => "Global Variables Updated"
        ),

        // Video Administration
        array( self::CAT_VIDEO_ADMIN => "Video Administration" ) => array(
            self::TYPE_VIDEO_ADDED => "Video Added",
            self::TYPE_VIDEO_EDITED => "Video Edited",
            self::TYPE_VIDEO_REMOVED => "Video Removed"
        ),

        // Bulletin Board Administration
        array( self::CAT_BULLETIN_BOARD => "Bulletin Board Administration" ) => array(
            self::TYPE_BULLETIN_DELETED => "Message Deleted",
            self::TYPE_BULLETIN_EDITED => "Message Edited",
            self::TYPE_BULLETIN_ADDED => "Message Added"
        ),

        // User Administration
        array( self::CAT_USER_ADMIN => "User Administration" ) => array(
            self::TYPE_USER_ADDED => "User Added",
            self::TYPE_USER_ADDED_MULTI => "Multiple Users Added",
            self::TYPE_USER_REMOVED => "User Removed",
            self::TYPE_USER_REMOVED_MULTI => "Multiple Users Removed",
            self::TYPE_USER_UPDATED => "User Updated"
        ),

        // Survey Administration
        array( self::CAT_SURVEY_ADMIN => "Survey Administration" ) => array(
            self::TYPE_SURVEY_ADDED => "Survey Added",
            self::TYPE_SURVEY_UPDATED => "Survey Updated",
            self::TYPE_SURVEY_REMOVED => "Survey Removed",
            self::TYPE_SURVEY_REMOVED_MULTI => "Multiple Surveys Removed"
        )
    );

ここのキーで定義されているものを定義するためだけに別の配列を作成するのはちょっと面倒なので、それが私の問題であるかどうか疑問に思いました。もしそうなら、私はカテゴリIDと文字列値のKey-Value配列を作成する必要があると思います。

ありがとう!

4

3 に答える 3

8

illegal offset type配列キーはスカラー値にしかなり得ないため、エラーが発生します。アレイに関するドキュメントから:

キーは整数または文字列のいずれかです。キーが整数の標準表現である場合、そのように解釈されます(つまり、「8」は8として解釈され、「08」は「08」として解釈されます)。キーのフロートは整数に切り捨てられます。

以来self::CAT_CRON_JOBS。とにかく定数である必要があるようです。値が説明テキストになるように定義するだけで、次のように配列を指定できます。

const CAT_STATEMENT_ADMIN = "Document Administration";

public static $CATS_AND_TYPES = array(

  // Statement Administration
  self::CAT_STATEMENT_ADMIN => array(
    self::TYPE_STATEMENTS_LOADED => "Documents Loaded",
    self::TYPE_STATEMENTS_REMOVED => "Documents Removed"
  ),

  // etc.
)

そして、$CATS_AND_TYPES[self::CAT_STATEMENT_ADMIN](もちろん、クラス内で)または$CATS_AND_TYPES['Document Administration']同じ配列要素を取得するために使用できます。

于 2010-08-17T16:33:42.583 に答える
3

いいえ。配列は、キーとして整数と文字列のみを持つことができます。

配列をシミュレートし、オブジェクトをキーとして使用できますSplObjectStorage。ただし、アレイはありません。

于 2010-08-17T16:47:29.070 に答える
1

私はそれがあなたの問題だと思います:P

私はこのような問題に取り組みます

public static $CATS_AND_TYPES = array(

    self::CAT_STATEMENT_ADMIN => array(
        self::TYPE_STATEMENTS_LOADED,
        self::TYPE_STATEMENTS_REMOVED
    ),

    // ...
);

public static $TRANSLATIONS = array(
    self::CAT_STATEMENT_ADMIN => 'Email Administration',
    self::TYPE_STATEMENTS_LOADED = "Documents Loaded",
// ...

基本的には、「別のアレイを作成する」という意味だと思います。これは、翻訳と階層情報を分離するため、問題に対する正しいアプローチです。

プロジェクトを別の言語に翻訳したいときを想像してみてください。翻訳者を雇った場合、彼は翻訳するだけなので、プロジェクトの階層構造を知る必要はありません。別のファイルに抽出$TRANSLATIONSして、そのファイルを99人の翻訳者に配布することもできます。そうすれば、プロジェクトは1日で多言語対応になります。

気になる場合は、配列をスカラー値にシリアル化して、キーとして機能させることができます。

// Untested
public static $CATS_AND_TYPES = array(
    serialize(array(self::CAT_STATEMENT_ADMIN=>"Documents and Administration")) => array(
        self::TYPE_STATEMENTS_LOADED => "Documents Loaded"
        // ...
    )
);

// You can later get back the values
foreach(self::CATS_AND_TYPES as $k=>$v)
{
    $title = unserialize($k);
    displayTitle($title[0]);

    foreacH($v as $bar) displaySubtitle($bar);
}
于 2010-08-17T17:05:44.883 に答える