2010-08-14 120 views
0
 $showcaseObject = new stdClass(); 
    $generalObject = new stdClass(); 
    $generalObject->roundCorner = 0; 
    $generalObject->borderStroke = 2; 
    $generalObject->backgroundColor = '#fff'; 

    $showcaseObject->general = $generalObject; 

    echo json_encode($showcaseObject);

,我得到這樣的PHP - 生成JSON輸出

{"general":{ 
"roundCorner":"0", 
"borderStroke":"2", 
"backgroundColor":"#ffffff" 
} 
} 

現在我想是這樣的

{"general":{ 
"round-corner":"0", 
"border-stroke":"2", 
"background-color":"#ffffff" 
} 
} 

我試圖改變上面的代碼像下的代碼,得到語法錯誤,意外'='

$generalObject->round-corner = $row->general_round_corner_radius; 
$generalObject->border-stroke = $row->general_border_stroke; 
$generalObject->background-color = $row->background_color; 

Hel我!

+0

破折號/減號在PHP變量(或屬性,類,函數等)名稱中使用時不合法。 http://us2.php.net/manual/en/language.variables.basics.php – cbednarski 2010-08-14 02:01:00

+0

謝謝! 我嘗試使用$ generalObject - > {'round-corner'},它的工作原理是 – Chameron 2010-08-14 03:56:36

回答

0

要將第一種形式轉換爲第二種,遍歷每個鍵並轉換鍵名。

foreach ($generalObject as $keyName => $keyValue) { 
    $newKey = strtolower(preg_replace('/([^A-Z])([A-Z])/', "$1_$2", $keyName)); 
    $generalObject[$newKey] = $keyValue; 
    unset($generalObject[$keyName]); 
}

要訪問它們(這是您遇到的問題是什麼),使用括號標記:

$generalObject['hyphenated-name'] 
+0

謝謝你的anwser。 但我怎麼能使用$ generalObject [$ newKey] = $ keyValue。變量$ generalObject是stdClass的實例 – Chameron 2010-08-14 01:50:54

0

我認爲最簡單的方法可以是簡單地做了一些JSON字符串替換你有,獲得在他們不能被自動插入由於連字符字符的字符串,以PHP的允許變量字符集:

$showcaseObject = new stdClass(); 
$generalObject = new stdClass(); 
$generalObject->roundCorner = 0; 
$generalObject->borderStroke = 2; 
$generalObject->backgroundColor = '#fff'; 

$showcaseObject->general = $generalObject; 

$jsonStr = json_encode($showcaseObject); 
$jsonStr = str_replace('"roundCorner":', '"round-corner":', $jsonStr); 
$jsonStr = str_replace('"borderStroke":', '"border-stroke":', $jsonStr); 
$jsonStr = str_replace('"backgroundColor":', '"background-color":', $jsonStr); 

echo $jsonStr; 
+0

感謝您的回答 – Chameron 2010-08-17 01:02:59

1

你可以使用大括號語法定義對象的成員時:

$showcaseObject = new stdClass(); 
$generalObject = new stdClass(); 
$generalObject->{'round-corner'} = 0; 
$generalObject->{'border-stroke'} = 2; 
$generalObject->{'background-color'} = '#fff'; 

$showcaseObject->general = $generalObject; 

echo json_encode($showcaseObject); 

此括號語法允許您使用表達式而不僅僅是標識符。

+0

謝謝。我回答了我的問題! – Chameron 2010-08-16 02:22:49