php unset對json encode的影響

2022-04-15 23:16:23 字數 1962 閱讀 2636

先執行一段php**:

$a = array(0=>'hello world', 1=>'girl', 2=>'boy');

var_dump(json_encode($a

));unset($a[1]);

var_dump(json_encode($a));

返回結果如下:

string(28) "["hello world","girl","boy"]"

string(29) ""

發現對乙個陣列unset前後,變數的型別變化了,unset前是陣列,unset後是物件這是為什麼呢?看下unset和json_encode究竟是做了什麼:

unset() 銷毀指定的變數。可以刪除陣列的指定元素,刪除後索引不重排。

json_encode() 用於對變數進行 json 編碼,該函式如果執行成功返回 json 資料,否則返回 false 

而json_encode轉換的物件如果是陣列,那麼就需要注意下了,看下面的示例:

舉例:

$a = array(0=>'hello world', 1=>'girl', 2=>'boy');

var_dump(json_encode($a

));$b = array('name'=>'hello world', 'age'=>'18', 'gender'=>'man');

var_dump(json_encode($b));

運算結果:

string(28) "["hello world","girl","boy"]"

string(48) ""

發現上面的結果乙個是陣列,乙個是物件。

這是因為$a是索引陣列(連續陣列),$b則是關聯陣列(非連續陣列)

再看乙個官方的例子:

以上輸出的結果是:

注意:上面的第二個陣列之所以轉化後變成物件,是因為鍵值不是從0開始,這也是非連續陣列

php中:

索引陣列:是指以數字為鍵的陣列。並且這個鍵值 是自增的

關聯陣列:指的是乙個鍵值對應乙個值,並且這個鍵值是不規律的,通常都是我們自己指定的。

索引陣列轉為json後是陣列。而關聯陣列轉為json後是物件

那如果想對連續陣列執行json_encode後變成物件可以這樣做:

$arr = array

( '0'=>'a','1'=>'b','2'=>'c','3'=>'d');

echo json_encode((object)$arr);

輸出結果為:

如何消除unset對json_encode的影響?達到轉換結果依然為陣列

使用unset時:

foreach ($array

as$k => $v

) }

優化後:

$tmp = array

();foreach ($array

as$k => $v

)

$tmp = $v;}

$array = $tmp;

對優化後的$array進行json_encode就可以完美的轉換為陣列而不是物件了

PHPunset 用法詳解

unset 銷毀指定的變數。注意在 php 3 中,unset 將返回true 實際上是整型值 1 而在 php 4 中,unset 不再是乙個真正的函式 它現在是乙個語句。這樣就沒有了返回值,試圖獲取 unset 的返回值將導致解析錯誤。例子 1.unset 示例 銷毀單個變數 unset foo...

057 PHP unset 用法詳解

unset 銷毀指定的變數。注意在 php 3 中,unset 將返回 true 實際上是整型值 1 而在 php 4 中,unset 不再是乙個真正的函式 它現在是乙個語句。這樣就沒有了返回值,試圖獲取 unset 的返回值將導致解析錯誤。例子 1.unset 示例 銷毀單個變數 unset fo...

PHP unset銷毀變數並釋放記憶體

php的unset 函式用來清除 銷毀變數,不用的變數,我們可以用unset 將它銷毀。但是某些時候,用unset 卻無法達到銷毀變數占用的記憶體!我們先看乙個例子 s str repeat 1 255 產生由255個1組成的字串 m memory get usage 獲取當前占用記憶體 unset...