您好,登錄后才能下訂單哦!
小編給大家分享一下PHP中json_encode函數參數是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
最近遇到了一些關于PHP函數相關的問題,在和前輩交流的時候被問及自己所能寫出的關于字符串處理和數組相關的函數問題,然后考慮了一下,覺著這些PHP最基礎的部分可能在面試中小型公司的時候會被經常問到,在之前的求職面試里面自己更多的注重了數據結構,算法或者數據庫相關的這些知識點,對于PHP的基礎相關的知識點在工作中也是常常不能熟悉的運用,一般的狀態更多是知道有這個函數在,然后百度或者查下手冊,在解決了自己的問題之后便降至拋之腦后,雖然能夠回答出來一部分函數,但是前輩在深入的問及關于函數有幾個參數的時候卻又是一臉懵逼。
在之前個人認為自己在PHP這個語言以及PHP后端開發上面應該是稍微比較駕輕就熟的一個狀態,一般的問題應該對自己來說都問題不大了,卻被區區函數問題搞得心態爆炸,仔細思考了之后覺得如果我連這些基礎的知識點都不能夠很熟練的話,那我還有什么話可以說我PHP很熟練。現在準備在空閑時間都能夠思考一下自己所用過的函數或者其他知識點,也希望能夠讓自己的思考成為慣性。
今天主要看了一下json_encode函數的參數以及使用,以下主要是對json_encode第2/3個參數的一些自己認為的解析。
首先看一下php.net中關于json_encode的說明:
Description
string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )
Returns a string containing the JSON representation of the supplied value // 返回json格式的字符串
The encoding is affected by the supplied options and additionally the encoding of float values depends on the value of serialize_precision. // 所返回json格式的字符串取決于第二個參數
一: json_encode常常被用于將數組轉換成json格式的字符串來表示,但是json_encode的第一個參數卻并不一定是數組格式,第一個參數可以為對象,數組,字符串。
$array = [ 'a' => 'he', 'b' => 'llo', 'c' => 'world', 'd' => [ 1 => 'a', 2 => 'b', 3 => 'c' ] ]; // 參數為普通數組 string(62) "{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}" var_dump(json_encode($array)); // 將數組先轉為json格式字符串,再使用json_decode轉為對象,之后詳細研究json_decode的參數,使用等 $obj = json_decode(json_encode($array)); // 參數為對象 string(62) "{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}" var_dump(json_encode($obj)); // 參數為字符串 // string(90) ""{\"a\":\"he\",\"b\":\"llo\",\"c\":\"world\",\"d\":{\"1\":\"a\",\"2\":\"b\",\"3\":\"c\"}}"" var_dump(json_encode(json_encode($obj))); var_dump(json_encode('h"e\l/l[o')); // string(14) ""h\"e\\l\/l[o"" var_dump('h"e\l/l[o'); //string(9) "h"e\l/l[o"
可以發現object和array類型轉換為json字符串之后沒有差別,而string被json_encode之后,string中的【'】,【"】,【\】,【/】會被轉義。
二:接下來看一下第二個參數:
options參考選自原文:https://blog.csdn.net/qd824692746/article/details/50912723
JSON_HEX_TAG (integer) 所有的 < 和 > 轉換成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。
JSON_HEX_AMP (integer) 所有的 & 轉換成 \u0026。 自 PHP 5.3.0 起生效。
JSON_HEX_APOS (integer) 所有的 ' 轉換成 \u0027。 自 PHP 5.3.0 起生效。
JSON_HEX_QUOT (integer) 所有的 " 轉換成 \u0022。 自 PHP 5.3.0 起生效。
JSON_FORCE_OBJECT (integer) 使一個非關聯數組輸出一個類(Object)而非數組。 在數組為空而接受者需要一個類 (Object)的時候尤其有用。 自 PHP 5.3.0 起生效。
JSON_NUMERIC_CHECK (integer) 將所有數字字符串編碼成數字(numbers)。 自 PHP 5.3.3 起生效。
JSON_BIGINT_AS_STRING (integer) 將大數字編碼成原始字符原來的值。 自 PHP 5.4.0 起生效。
JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的數據。 自 PHP 5.4.0 起生效。
JSON_UNESCAPED_SLASHES (integer) 不要編碼 /。 自 PHP 5.4.0 起生效。
JSON_UNESCAPED_UNICODE (integer) 以字面編碼多字節 Unicode 字符(默認是編碼成 \uXXXX)。 自 PHP 5.4.0 起生效。
大家可以參考以上羅列出來的常量測試一下。也可以選取自己業務邏輯上的來達到自己的目的。
三:接下來說一下第三個參數,在本人購買的PHP中文手冊中發現json_encode函數中只有以上兩個參數,并沒有第三個參數depth,在查閱PHP官方文檔中是有這個參數的,但是文檔中并沒有詳細的解釋以及示例。猜測大概率是PHP版本的問題,也許購買的中文手冊是基于舊版本的,官方文檔是最新版。在測試中發現第三個參數的不同導致的輸出是有區別的。
// 數組深度為2 $array = [ 'a' => '"\/hello', 'b' => '\world', 'c' => '/php_json_decode', 'd' => [ 1 => '"\/php', 2 => '//\js', 3 => 'python', 4 => 'golang' ] ]; var_dump(json_encode($array,0,1)); // bool(false) var_dump(json_encode($array,0,2)); // string(120) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"}}" var_dump(json_encode($array,0,3)); // string(120) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"}}" var_dump(json_encode($array,0,4)); // string(120) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"}}" // 數組深度為3 $array = [ 'a' => '"\/hello', 'b' => '\world', 'c' => '/php_json_decode', 'd' => [ 1 => '"\/php', 2 => '//\js', 3 => 'python', 4 => 'golang' ], 'e' => [ 'xxx' => [ 'hello' => 'world' ] ] ]; var_dump(json_encode($array,0,1)); // bool(false) var_dump(json_encode($array,0,2)); // bool(false) var_dump(json_encode($array,0,3)); // string(150) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"},"e":{"xxx":{"hello":"world"}}}" var_dump(json_encode($array,0,4)); // string(150) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"},"e":{"xxx":{"hello":"world"}}}"
以上是“PHP中json_encode函數參數是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。