$result = AssetModel::biGetRecords($userId);
结果是对象数组。
像这样array(100) {
[0]=>
object(stdClass)#1120 (3) {
["id"]=>
int(1058064)
["asset_id"]=>
string(16) "12345"
["name"]=>
string(22) "David"
}
[1]=>
object(stdClass)#1116 (3) {
["id"]=>
int(1058088)
["asset_id"]=>
string(16) "34567"
["name"]=>
string(6) "Smith"
所以我用
$result = json_decode(json_encode($result), true);
将std对象数组传递给数组数组。
工作正常。但是当新的记录加入时。突然间
$result = json_decode(json_encode($result), true);
而不是返回数组数组,它现在返回空数组。
我的猜测是一些带有一些无效字符的新记录会使json_encode返回无效的json字符串,所以下一步json_decode不起作用?
echo "get results: ";
echo count($result);
$result = json_decode(json_encode($result), true);
echo " count data results again: ";
echo count($result);
结果是
get results: 397320 count data results again: 0
所以我的问题是
$result = json_decode(json_encode($result), true)
不是将对象数组传输到数组数组的防错方法吗?谢谢!
答案 0 :(得分:1)
关于限制结果的your comment后,我的想法是你的脚本达到了内存限制。我会尝试按项目执行编码/解码...
这将按项目级别执行翻译。
$mocklist = array_fill( 0, 100, (object) array('foo'=>'foo','bar'=>'bar') );
array_walk( $mocklist, function( &$value ){
$value = json_decode( json_encode( $value ), true );
});
print_r( $mocklist );
您还可以利用它来查找粗略的手动调试方式中哪个$值变为空。
array_walk( $mocklist, function( $value ){
if( empty( json_decode( json_encode( $value ), true ) )
{
print_r( $value );
exit('Found the empty one!');
}
});
答案 1 :(得分:0)
Scuzzy建议,我应该使用php.net/manual/en/function.json-last-error-msg.php来报告错误。
是。当我执行json_encode时出错。
Malformed UTF-8 characters, possibly incorrectly encoded
由于两个原因,我之前经常遇到这个UTF-8格式错误的问题
但是自从数据库'表格今天主要编码为utf8,并且越来越多的数据以json格式传输而不是xml,我很长时间没有遇到过utf8字符问题。
现在回到我的问题,我的表是
ENGINE=InnoDB DEFAULT CHARSET=utf8
我需要弄清楚为什么这些表的查询结果仍然给我utf8格式错误的问题。
谢谢!