先執行一段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"]"發現對乙個陣列unset前後,變數的型別變化了,unset前是陣列,unset後是物件這是為什麼呢?看下unset和json_encode究竟是做了什麼:string(29) ""
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輸出結果為: 如何消除unset對json_encode的影響?達到轉換結果依然為陣列( '0'=>'a','1'=>'b','2'=>'c','3'=>'d');
echo json_encode((object)$arr);
使用unset時:
foreach ($array優化後:as$k => $v
) }
$tmp = array對優化後的$array進行json_encode就可以完美的轉換為陣列而不是物件了();foreach ($array
as$k => $v
)
$tmp = $v;}
$array = $tmp;
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...