我希望有人已經做到了這一點,並可能分享解決方案。目前還沒有解決方案,所以我會做一個嘗試。
正如@rkosegi指出的那樣,$link
是一種資源。因此,我們應該期待以下幾點:
var_export
定投的資源到一個數組(mysqli::__set_state
) - 所以null
又在發
foreach
也把它作爲一個陣列,使我們null
小號
var_dump
能拿值(but could not be easily captured)
然而print_r
,使我們的價值觀,並且可以保存
所以,樂T的使用print_r
:
$raw = print_r($link, true);
對於某些字符串分析,我們可以得到我們想要的東西。
更新 - 添加字符串告誡解析(error_list
):
$link = mysqli_connect('localhost', 'root', 'lilo123', 'm1_s1');
$raw = print_r($link, true);
$raw = explode(PHP_EOL, $raw);
$link_arr = [];
foreach($link as $k => $v) {
$match = array_filter($raw, function($var) use ($k) { return strpos($var, '['.$k.']'); });
$val = array_values($match)[0];
if(strpos($val, ' => ')) {
$val = explode(' => ', $val)[1];
$link_arr[$k] = $val;
}
}
$link_json = json_encode($link_arr, JSON_PRETTY_PRINT);
echo $link_json;
輸出:
{
"affected_rows": "0",
"client_info": "mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $",
"client_version": "50011",
"connect_errno": "0",
"connect_error": "",
"errno": "0",
"error": "",
"error_list": "Array", <-- no good
"field_count": "0",
"host_info": "Localhost via UNIX socket",
"info": "",
"insert_id": "0",
"server_info": "5.7.19-0ubuntu0.16.04.1",
"server_version": "50719",
"stat": "Uptime: 52396 Threads: 1 Questions: 36754 Slow queries: 0 Opens: 133 Flush tables: 1 Open tables: 60 Queries per second avg: 0.701",
"sqlstate": "00000",
"protocol_version": "10",
"thread_id": "5274",
"warning_count": "0"
}
這是事實,但問題不在於是否json_encode''可以做編碼,它不能,我知道這個事實。問題是:*有沒有辦法讓json_encoded字符串具有相同的值?* –