我正在為我的 linux 可執行檔案構建一個簡單的 GUI。我只是使用 HTML/Javascript 和 PHP。我的問題是system使用 json 字串作為引數呼叫我的可執行檔案,我的字串在陣列中沒有索引。這是我的代碼
$b = [0=>[1,2,3],1=>[4,5,6]];
var_dump(json_encode($b,JSON_NUMERIC_CHECK));
string(17) "[[1,2,3],[4,5,6]]"
我需要帶鍵的字串,因為 c/c 代碼需要索引,為什么會發生?如何解決?謝謝
uj5u.com熱心網友回復:
JSON 實際上是一個字串化的 Javascript,如果你想表示一個鍵 => 值結構,這些結構應該是物件或關聯陣列。PHP 會假設任何只有數字的關聯陣列作為常規陣列的鍵,因此您應該將陣列轉換為物件。物件不能將數字作為鍵(屬性),因此它們將被轉換為字串,因此您實際上將擁有'0' => [1,2,3]... 等等。
最簡單的方法就是將陣列轉換為物件。看下面的例子:
<?php
$array = [0=>[1,2,3],1=>[4,5,6]];
$object = (object) $array;
print json_encode($array);
print json_encode($object);
?>
輸出:
[[1,2,3],[4,5,6]]{"0":[1,2,3],"1":[4,5,6]}
添加:
解碼 JSON 時,您可以進行相反的轉換,即到陣列:
<?php
$arr = (array)json_decode('{"0":[1,2,3],"1":[4,5,6]}');
var_dump($arr);
$obj = json_decode('{"0":[1,2,3],"1":[4,5,6]}');
var_dump($obj);
?>
輸出:
array(2) {
[0]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
[1]=>
array(3) {
[0]=>
int(4)
[1]=>
int(5)
[2]=>
int(6)
}
}
object(stdClass)#1 (2) {
["0"]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
["1"]=>
array(3) {
[0]=>
int(4)
[1]=>
int(5)
[2]=>
int(6)
}
}
uj5u.com熱心網友回復:
您可以使用JSON_FORCE_OBJECTflag強制使用 json_encode 數字鍵:
var_dump(json_encode($b,JSON_NUMERIC_CHECK|JSON_FORCE_OBJECT));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314216.html
