相关疑难解决方法(0)

使用数字键作为对象转换数组

我在探讨PHP的构建机制,并在将数组作为对象进行投射时遇到了一个奇怪的情况

$o = (object) array('1'=>'/foo/bar');   
$o = new stdClass();
var_dump($o);
Run Code Online (Sandbox Code Playgroud)

据我了解,PHP属性需要使用与PHP变量相同的规则声明.这是一个有效的变量名称,以字母或下划线开头,后跟任意数量的字母,数字或下划线.但是,上面的代码产生以下输出

object(stdClass)#1 (1) {
  [1]=>
  string(8) "/foo/bar"
}
Run Code Online (Sandbox Code Playgroud)

当你试图访问对象中的信息时,它变得非常奇怪.

var_dump($o->1);        // parse error
var_dump($o->{'1'});        // NULL 
var_dump(get_object_vars($o));  //array(0) { }
Run Code Online (Sandbox Code Playgroud)

无论如何都要获取var_dump报告的信息在对象中,或者它是否仅在请求生命周期的其余部分被锁定?(实际使用这是零,我只是好奇)

php arrays casting

12
推荐指数
2
解决办法
4994
查看次数

如何将大对象/数组序列化为JSON

我的应用程序需要生成一个具有data类型数组的大属性的对象的json .数组需要在收集数据库输出时保留在内存中,并且只有在数组完成后才能确定某些属性.

复杂性:数组是基于数字的,并且必须在json输出中显示,因此直接json_encode()不是一个选项.

为了在像RasPi这样的低规格机器上实现这一点,我研究了修剪内存消耗:

  1. 使用 SPLFixedArray
  2. 使用stringpack()

这两种方法都会处理数组存储内存问题,但在使用JSON进行编码时会失败.

我已经研究了实现JsonSerializable但是因为它强制用户返回结果,然后在Json中编码我回到了

public function jsonSerialize() {
    return $this->toArray();
}
Run Code Online (Sandbox Code Playgroud)

它有相同的记忆问题.

zendframework/Component_ZendJson看起来很有希望,因为它寻找具有toJson()提供自己的编码的方法的对象string而不是object.

我想知道是否有更好的选择不会给内存问题?

php arrays spl json zend-framework

2
推荐指数
1
解决办法
1655
查看次数

标签 统计

arrays ×2

php ×2

casting ×1

json ×1

spl ×1

zend-framework ×1