2013-04-28 48 views
1

這可能太明顯了,但我現在有點腦子死了。我在做什麼錯誤在php中聲明一個對象數組?

$sizeArr = array({ 
        "name"=>'18"x24"',"wd"=>18,"ht"=>24,"price"=>99.00 
       }, 
       { 
        "name"=>'24"x36"',"wd"=>24,"ht"=>36,"price"=>189.00 
       }); 

我希望它像$sizeArr[0]->name訪問,但是我收到一個錯誤說Unexpected {

我在做什麼錯?

+0

您使用匿名對象語法,在其他語言的熟悉,一點不存在於PHP中。你不能'$ o = {'foo =>'bar'};'。但是,可以創建'stdClass'的實例,如下所示:'$ o = new stdClass; $ o-> foo ='bar';' – Dan 2013-04-28 14:15:44

回答

3

您不能使用{}來定義PHP中的對象,就像您在JavaScript中所定義的那樣(我假設您熟悉這一點)。

在PHP對象和數組都是array s - 是的,如果你序列化爲JSON,這會產生問題。

所以:

$sizeArr = array(array(
    "name"=>'18"x24"',"wd"=>18,"ht"=>24,"price"=>99.00 
), 
array(
    "name"=>'24"x36"',"wd"=>24,"ht"=>36,"price"=>189.00 
)); 
+3

對象不是數組。它們在用於在內部存儲zend值的結構中使用不同的字段。我認爲你的真正含義是「在PHP字典中,數組都是數組」。 – 2013-04-28 14:03:39

+0

@Denis也許是這樣,但是(據我所知)沒有辦法在PHP本身中利用這種差異。索引數組和關聯數組是不可區分的(這可能是一個問題)。我使用了術語OP,'object'的定義非常鬆散,特別是當一次談到兩種語言時。 – Halcyon 2013-04-28 14:05:48

+0

儘管對象絕對不是*數組,但這仍然是一個更好的方法。你必須將它定義爲一個數組,然後才能使它成爲一個對象(通過強制轉換),所以將它作爲一個數組保留是有意義的。 – animuson 2013-04-28 14:08:16

0

你不能使用{}這個,但你可以試試這個

(object)是爲轉換arrayobject

$sizeArr = array(
    (object)array(
     "name"=>'18"x24"',"wd"=>18,"ht"=>24,"price"=>99.00 
    ), 
    (object)array(
     "name"=>'24"x36"',"wd"=>24,"ht"=>36,"price"=>189.00 
    ) 
); 
echo $sizeArr[0]->name; 

$sizeArr結構print_r($sizeArr);輸出

Array 
(
    [0] => stdClass Object 
    (
     [name] => 18"x24" 
     [wd] => 18 
     [ht] => 24 
     [price] => 99 
    ) 

    [1] => stdClass Object 
    (
     [name] => 24"x36" 
     [wd] => 24 
     [ht] => 36 
     [price] => 189 
    ) 

) 

輸出:

18"x24" 
0
$sizeArr = array(
        (object)array("name"=>'18"x24"',"wd"=>18,"ht"=>24,"price"=>99.00), 
        (object)array("name"=>'24"x36"',"wd"=>24,"ht"=>36,"price"=>189.00) 
        ); 



    $sizeArr[0]->name; 
+0

您不能將數組數組轉換爲對象,因爲它沒有可以分配的[有效]鍵。您必須將數組內的每個數組逐個(通過最有可能的循環)轉換爲一個對象來創建一個對象數組。 – animuson 2013-04-28 14:22:52

+0

@animuson thx試過了,它解決了 – user1180807 2013-04-28 14:29:42

相關問題