我正在开发一个支持系统,用户可以将他的会话保存在数据库中,公司可以在另一台计算机上打开他的会话来帮助他。
我的问题:
问题是解码json后我的会话数组中有一个额外的级别。 (观看下面的数组)
我的职能:
此函数保存会话和json_encode并将其保存在数据库行中。然后它返回一个"支持网址"可以由公司打开以加载会话。
function gtp_support_request( $referer ) {
global $wpdb;
$url_id = url_to_postid( $referer );
$request_id = time();
$table = $wpdb->prefix . 'support_requests';
if( isset( $_SESSION ) )
$config = json_encode( $_SESSION );
else
$config = '';
$wpdb->insert(
$table,
array(
'request_id' => $request_id,
'config' => $config,
'url_id' => $url_id,
),
array( '%d', '%s', '%d' )
);
$request_url = get_permalink( $url_id ) . '?support_id=' . $request_id;
echo $request_url;
}
此函数通过URL中的支持ID从数据库获取json数据,然后json_decode配置并将其加载到会话中。
function gtp_load_support_request() {
global $wpdb;
if( ! empty( $_GET['support_id'] ) ) {
$request_id = $_GET['support_id'];
$table = $wpdb->prefix . 'support_requests';
$results = $wpdb->get_results( "SELECT config FROM $table WHERE request_id = $request_id" );
$config = json_decode( $results[0]->config, true );
$_SESSION[] = $config;
}
}
之前:
Array
(
[splashback] => Array
(
[dimensions] => Array
(
[width] => 1200
[height] => 800
)
[hole] => Array
(
[choice] => false
)
[holes] => Array
(
[0] => Array
(
[type] => Array
(
[type] => single
[name] => Single socket
)
[x] => 120
[y] => 300
)
)
)
)
新阵列:
Array
(
[0] => Array
(
[splashback] => Array
(
[dimensions] => Array
(
[width] => 1200
[height] => 800
)
[hole] => Array
(
[choice] => false
)
[holes] => Array
(
[0] => Array
(
[type] => Array
(
[type] => single
[name] => Single socket
)
[x] => 120
[y] => 300
)
)
)
)
)
答案 0 :(得分:1)
我需要这样做:
$_SESSION = $config;
而不是:
$_SESSION[] = $config;
答案 1 :(得分:0)
你可以通过在恢复时分配整个结果而不是第一个元素来解决这个问题:
$_SESSION[] = $config[0];
修改强>
json_decode
返回\stdClass
的实例,而不是数组。这意味着您需要先将其转换为数组,然后才能访问数组之类的键。
试试这个:
$config = (array)json_decode( $results[0]->config, true );
$_SESSION[] = $config[0];