2010-12-20 24 views
1

因此,我有一個存儲在對象中的多維數組。我想添加額外的鍵到這個數組。將多維數組存儲爲對象變量,將其他鍵添加到數組

這是我有:

$object->pathsArray = array(
    "key1" => array('path' => '/some/path/to/some/file.php', 'action' => 'index'), 
    "key2" => array('path' => '/some/path/to/some/class.php', 'action' => 'method2') 
); 

這裏就是我認爲會工作,但都沒有:

$object->pathsArray['key3'] = array('path' => '/some/path/to/some/method/or/script.php', 'action' => 'method3'); 

我的第一個解決方法:

$newPathsArray = array("key3" => array('path' => '/some/path/to/some/method/or/script.php', 'action' => 'method3')); 
$object->pathsArray = array_merge($object->pathsArray, $newPathsArray); 

另一個解決辦法應該工作:

$tempPathsArray = $object->pathsArray; 
$tempPathsArray['key3'] = array('path' => '/some/path/to/some/method/or/script.php', 'action' => 'method3'); 
$object->pathsArray = $tempPathsArray; 

所以我的問題:是否有一個簡單的語法(即:一個在線解決方案),還是我被迫在一個臨時帶上。變量,追加到然後合併/重新賦值給對象?

+0

當你說第一個版本不起作用時,它以什麼方式失敗? 'pathsArray'沒有改變嗎?如果是這樣的話,它表明該對象具有某種自定義的獲取/設置邏輯,每次請求時它都會給你一個實際存儲數組的*副本(因此實際改變它的唯一方法是使用設置邏輯,覆蓋整個數組)。如果是這種情況,那麼你的第一個解決方法可能是最簡單的方法。 – Amber 2010-12-20 21:02:25

+0

@Tom你最初是如何設定'key1'和'key2'鍵的? 'pathsArray'屬性是否被定義爲private/protected? – 2010-12-20 21:10:36

+0

@Amber,我甚至沒有考慮現在解釋的get/set邏輯是非常有意義的。 – Tom 2010-12-20 21:20:39

回答

0

對不起,寫了一個答案,但我無法評論。 我認爲公開某個屬性只是爲了通過這種方式來使用它是不正確的。正確的做法應該是製作一個填充器來填充它,而不是僅僅爲此修改類設計。