在PHP中从序列化数组中获取一个值

时间:2011-11-19 08:13:15

标签: php arrays serialization

您认为从阵列中获取单个值的最有效方法是什么?我知道它是什么,我知道它在哪里。目前我正在这样做:

 $array = unserialize($storedArray);
 $var = $array['keyOne'];

想知道是否有更好的方法。

6 个答案:

答案 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

相关问题