您认为从阵列中获取单个值的最有效方法是什么?我知道它是什么,我知道它在哪里。目前我正在这样做:
$array = unserialize($storedArray);
$var = $array['keyOne'];
想知道是否有更好的方法。
答案 0 :(得分:2)
你做得很好,我想不出比你正在做的更好的方式。
这就是它可以做到的方式。
答案 1 :(得分:1)
想知道是否有更好的方法。
对于你给阵列的例子,我认为你很好。
如果序列化字符串包含您不想反序列化的数据和对象(例如创建您真正不想要的对象),则可以使用Serialized PHP library这是一个完整的解析器用于序列化数据。
它静态地提供对序列化数据的低级访问,因此您只能提取数据子集和/或操作序列化数据,而不会对其进行反序列化。然而,对于您的示例而言,这看起来太多了,因为您只有一个数组而且我不需要过滤/差异太多我猜。
答案 2 :(得分:0)
如果您需要优化,则可以执行,反序列化和获取数据的最有效方法不要存储序列化的所有变量。
此外总是有办法用regexp解析它:)
答案 3 :(得分:0)
如果你不想整个事情(这可能代价高昂,特别是对于更复杂的对象),你可以只做一个strpos并寻找你想要的功能并提取它们
答案 4 :(得分:0)
不确定。
如果您需要更好的方法 - 请勿使用序列化阵列
序列化只是一种非常有限的传输格式。
如果你需要一些优化的变体 - 它们有数百种 例如,您可以传递一些单个标量变量而不是整个数组。并立即访问
答案 5 :(得分:0)
我也认为正确的方法是取消序列化。
但另一种方法是使用字符串操作,当你知道你想从数组中得到什么时:
$storedArray = 'a:2:{s:4:"test";s:2:"ja";s:6:"keyOne";i:5;}';
# another: a:2:{s:4:"test";s:2:"ja";s:6:"keyOne";s:3:"sdf";}
$split = explode('keyOne', $storedArray, 2);
# $split[1] contains the value and junk before and after the value
$splitagain = explode(';', $split[1], 3);
# $splitagain[1] should be the value with type information
$value = array_pop(explode(':', $splitagain[1], 3));
# $value contains the value
现在,有人想要一个基准? ;) 另一种方式可能是 RegEx ?