今天使用Thinkphp5做非同步任務傳遞where參數時遇到一個問題: 有一段如下代碼: $where['jst.supplier'] = ['exp', Db::raw('>0 or jst.is_supplier=1')]; 在使用swoole做非同步任務時需要把where參數傳遞給非同步任務處理, ...
今天使用Thinkphp5做非同步任務傳遞where參數時遇到一個問題:
有一段如下代碼:
$where['jst.supplier'] = ['exp', Db::raw('>0 or jst.is_supplier=1')];
在使用swoole做非同步任務時需要把where參數傳遞給非同步任務處理,因為無法傳遞數組和對象只能傳遞字元串,所以需要把where數組轉換成字元串;
以前一直是使用json_encode函數轉換json字元串,結果在今天使用發現報錯:
進一步追查發現,swoole_client傳遞的參數就有問題
原始參數是這樣的:
結果使用json_encode生成之後是這樣的:
網上找了很多辦法都不太好,
最後嘗試使用 serialize 函數對數組進行序列化,然後swoole服務端使用 unserialize 轉換回數組,結果發現Db對象完全保留未發生丟失。
serialize方法雖然不json格式可讀性高、占用字元少;但還是有可取之處。