$product = new Product("cat");
if(isset($sales[$product])){
$sales[$product]++;
}
else{
$sales[$product] = 1;
}
23
A
回答
38
從docs:
數組和對象不能被用作密鑰。這樣做會導致警告:非法偏移類型。
您可以給每個實例一個唯一的ID或覆蓋__toString()
,使它返回一些獨特的東西,例如,
$array[(string) $instance] = 42;
2
只有integers and strings are allowed as array keys。如果您絕對需要該功能,則可以編寫一個實現ArrayAccess的類。
13
您可以使用http://www.php.net/manual/en/class.splobjectstorage.php
$product = new Product("cat");
$sales = new SplObjectStorage();
if(isset($sales[$product])){
$sales[$product]++;
}
else{
$sales[$product] = 1;
}
這不是一個真正的數組,但有類似數組的功能和語法像樣的數目。然而,由於它是一個對象,由於其奇怪的foreach行爲,它在php中的行爲就像一個不適合,並且它與所有本地php數組函數不兼容。有時你會發現它有用通過
$arr = iterator_to_array($sales);
將其轉換爲一個真正的數組,以便它起到很好的與你的代碼的其餘部分。
14
有一個spl_object_hash函數獲取唯一的對象id作爲字符串,它可以用作數組鍵。 http://php.net/manual/en/function.spl-object-hash.php
0
如果對象是由new stdClass()
所做的簡單預定義的類,那麼使用json_encode
這個類的json表示可能是有效的選項。
$product = new stdClass();
$product->brand = "Acme";
$product->name = "Patator 3.14";
$product_key = json_encode($product);
if(isset($sales[$product_key])){
$sales[$product_key]++;
}
else{
$sales[$product_key] = 1;
}
但請記住,兩個對象的平等始終是商業模式的選擇,必須仔細設計。
相關問題
- 1. 我可以模擬不可能實例化的對象嗎?
- 2. 我可以使用協議對象作爲NSDictionary中的鍵嗎?
- 3. 我可以使用對象列表作爲字典鍵嗎?
- 4. 可以使用浮點數作爲對象中的鍵嗎?
- 5. 我可以做這個工作嗎?使用類調用實例化新數組
- 6. 我可以序列化ruby Digest :: SHA1實例對象嗎?
- 7. Java:我們可以使用DAO作爲單例實例嗎?
- 8. Java供應商可以優化對象實例化過程嗎?
- 9. 如果我沒有編寫用於實例化對象的類,我可以序列化一個對象嗎?
- 10. 爪哇 - 與數組實例化一個對象作爲參數
- 11. ASP.MVC中的Getter和Setter可以實例化一個對象嗎?
- 12. 我可以傳遞對特定對象的實例函數的引用嗎?
- 13. PHP:數組可以有一個數組作爲鍵值對中的鍵嗎?
- 14. 我可以使用對象的哈希碼作爲緩存鍵嗎?
- 15. 我可以使用配置文件作爲鍵值對嗎?
- 16. 對象方法調用可以與對象實例化同時完成嗎?
- 17. 可以在類已經實例化爲對象後傳遞__construct參數嗎?
- 18. 我可以傳遞一個數字作爲數據對象中的鍵嗎?
- 19. localStorage持久化鍵作爲對象嗎?
- 20. 你可以通過Property setter實例化對象嗎?
- 21. 使用可變數量的參數實例化一個對象
- 22. 我可以覆蓋類對象的新實例嗎?
- 23. 使用對象的實例作爲HashMap鍵
- 24. 是否可以使用實例方法作爲scipy的可調用對象?
- 25. 我可以使用Class對象作爲DataMember嗎?
- 26. 我可以使用std :: stack作爲對象池容器嗎?
- 27. 我可以訪問在該類外部實例化的對象嗎?
- 28. 我可以從連接的類名實例化一個對象嗎?
- 29. 我可以使用字符串數組作爲記錄集中的鍵嗎?
- 30. 是否可以使用VBScript或JScript實例化SharePoint對象?
它不會允許您將對象用作數組鍵。它允許的唯一的事情就是將對象當作一個數組來處理,所以對象的屬性將成爲鍵。 – 2014-07-29 16:25:14
它將允許你使用對象作爲鍵。有關示例實現,請參見http://pastebin.com/fzqeFswJ。 – Oswald 2014-07-30 06:18:57
我明白你的意思了,這很有道理。我的意思是它不允許你使用對象作爲_array_鍵。但是,是的,它將允許您使用對象作爲ArrayAccess對象的關鍵點 – 2014-08-01 19:33:14