[英]PHP: Can an array have an array as a key in a key-value pair?
我為這個數組得到了一個“非法偏移類型”:
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和字符串值創建一個鍵值數組。
謝謝!
您將收到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']
來獲得相同的數組元素。
不可以。數組只能有整數和字符串作為鍵。
您可以使用SplObjectStorage
模擬數組並將對象用作鍵。 但是沒有數組。
我認為這是你的問題: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個翻譯人員,您的項目將在一天內使用多語言!
如果您如此傾向,可以將數組序列化為標量值,以便它可以作為鍵。
// 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.