<?php
$array = [];
array_push($array,'1');
print_r($array);
?>
print_r的結果為 Array ( [0] => 1 )
<?php
$array = [];
$array['a'] = '1';
print_r($array);
?>
print_r的結果為 Array ( [a] => 1 )
但是再轉換成json格式時(json_encode($array))
用array_push的變成 ["1"]
用$array['a']的變成 {"a":"1"}
print_r的格式都是相同的,為何轉json會變成不同格式呢?
array_push是取值而已,會勿略及key值名稱。所以才會只有["1"]值。
array_push()
函數像低一個參數的組委添加一個或多個元素, return 新array 的長度
該函數等於多次調用 $array[] = $value。
你的問題不在於 JSON
而是
array_push 跟 $array['a'] = '1'; 本質上就是不一樣的
我想用$array['a'] = '1' ,轉乘json時不要變成{},而是[],該怎麼做呢?謝謝
不可能,json 就是一堆 [{},,{},{},{}...] 的東西才叫 json 你是看了什麼書阿
應該說 我有做一個json,原本是用array_push()加入資料,但是我想把array_push()改成$array['a'] = ''的方式,原本[]包覆的資料全部變成{}包覆,所以才上來問如何維持[]包覆
我希望陣列內的值前面可以加上索引值
如果是從0開始的陣列,
轉成json會變成 [],
用其他語言讀可以用Array解析,
如果不是(即使是數字index),
轉成json會變成 {},
用其他語言讀要用Dictionary解析.
這個坑我踩過...
抱歉,可以請大大獎詳細一點嗎? 或有甚麼參考連結,謝謝
php的陣列有分二種,一種是純陣列,一種是hash table
前者在一般的語言仍然是array,後者稱之為:dictionary
也就是字典。
知道什麼是字典吧。就像漢英或英漢字典。
英文像是key,漢字是value(其實反過來也對)
這種就叫做「雜湊」
認真的說,在一般的語言下連dictionary雜湊都是沒有順序可言的。
但php是個怪胎。他讓array和dictionary變成了不分的狀態。
在php的語言你可以這樣玩,但是一但轉換成別的語言格式,這種玩法就會有很大的問題。
結論:是array,就不要給他key值,是dictionary,那就給吧。
如果要混亂搭用,有可能就是自討苦吃了。
這沒有連結,
只是我的經驗,
也很難解釋,
總之
[]是陣列(Array),
{}是字典(Dictionary),
如果你不知道Dictionary可能要查一查.
這是C#的Dictionary的一些用法介紹.
C# Dictionary的用法,以及查字典的用途
現在Dictionary已經算是基本的類別了吧.
Samと可樂快跑
說到這個,
我那時候找這個問題找了好幾個小時,
因為我的陣列是從1開始,
結果PHP自動幫我轉成Dictionary
,
但是沒資料的時候我用的是[](Array)
,
然後接我資料的Python工程師就開始OOXX...
結果後來改成從0開始就解決了.
小魚
弱型別語言就是這樣了。
如果不自己處理好,要交給直譯或編譯器去判斷,
就很有可能會出差錯。
自從接觸了不同的語言之後,有時我還真的覺得php該廢………
看似讓初學者容易入門,其後卻製造了很多的麻煩。
json_encode 有第二個參數,用 JSON_FORCE_OBJECT 就會把它強制輸出成 {} 了
弱型別語言就是這樣了
js:我也該廢,但你能拿我怎樣?
淺水員
原來如此,
不過他要的好像是[]
[
{
"state_code": "1",
"nation_code": "tw",
"state_name": "台灣",
"tw_county": {
"1": {
"county_code": "1",
"state_code": "1",
"county_name": "台北市",
"tw_city": {
"1": {
"city_code": "1",
"county_code": "1",
"city_name": "中正區",
"zip_code": "100"
},
"2": {
"city_code": "2",
"county_code": "1",
"city_name": "大同區",
"zip_code": "103"
}
}
}
}
]
請問如果json 可以寫物件包物件嗎? 謝謝
物件包物件可以啊,
你可以先試試看,
有遇到問題再問.
小魚 因為剛接觸,不確定一般會不會這樣去寫,因為看到通常都是陣列包物件 謝謝
這樣包也是可以的
[
{
"state_code": "1",
"nation_code": "tw",
"state_name": "台灣",
"tw_county": [
{
"county_code": "1",
"state_code": "1",
"county_name": "台北市",
"tw_city": [
{
"city_code": "1",
"county_code": "1",
"city_name": "中正區",
"zip_code": "100"
},{
"city_code": "2",
"county_code": "1",
"city_name": "大同區",
"zip_code": "103"
}
]
}
]
}
]
{ } <== 這是因為引用了js的概念,可實際上json是不包含方法存在的。
單純的把這個看成dictionary會比較妥當。
(如果json包入method我會覺得是很危險的一件事,因為這變成可能從js去注入不該被執行的東西。)
how to use array_push for json_encode
https://stackoverflow.com/questions/22421132/how-to-use-array-push-for-json-encode
Demo:
<?php
$array = [];
array_push($array,array('name' => 'aloha','hp' => 999,'mp' => 999));
array_push($array,array('name' => 'Bob','hp' => 9999,'mp' => 1));
print_r($array);
echo '<br/>';
print_r(json_encode($array));
?>
Result:
Array ( [0] => Array ( [name] => aloha [hp] => 999 [mp] => 999 ) [1] => Array ( [name] => Bob [hp] => 9999 [mp] => 1 ) )
[{"name":"aloha","hp":999,"mp":999},{"name":"Bob","hp":9999,"mp":1}]