【问题标题】:Getting one value out of a serialized array in PHP从 PHP 中的序列化数组中获取一个值
【发布时间】:2011-11-19 08:13:14
【问题描述】:

你会说从数组中获取单个值的最有效方法。我知道它是什么,我知道它在哪里。目前我正在这样做:

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

想知道有没有更好的方法。

【问题讨论】:

  • 你的意思是像微优化更快的方式?
  • 你希望这个简洁多少?

标签: php arrays serialization


【解决方案1】:

你做得很好,我想不出比你正在做的更好的方法。

  • 你反序列化了
  • 你得到一个数组
  • 你通过指定索引获得价值

这样就可以了。

【讨论】:

  • 好的。我只是在确定,所以我不做任何我不需要的 tmp 变量。
  • @Methemer Array dereferencing 计划在 PHP 5.4 中添加,但尚未发布。这将允许您使用一行并执行以下操作:$var = unserialize($storedArray)['keyOne'];
【解决方案2】:

想知道有没有更好的方法。

对于您给出的数组示例,我认为您很好。

如果序列化的字符串包含您不想反序列化的数据和对象(例如,创建您真的不想拥有的对象),您可以使用Serialized PHP library,它是一个完整的序列化数据解析器。

它以静态方式提供对序列化数据的低级访问,因此您只能提取数据子集和/或操作序列化数据而无需对其进行反序列化。但是,对于您的示例而言,这看起来太多了,因为您只有一个数组,而且我猜您不需要过滤/差异太多。

【讨论】:

    【解决方案3】:

    这是最有效的方式,您可以执行反序列化和获取数据,如果您需要优化不要存储所有已序列化的变量。

    也总有办法用正则表达式解析它:)

    【讨论】:

      【解决方案4】:

      如果你不想取消序列化(这可能会很昂贵,尤其是对于更复杂的对象),你可以做一个 strpos 并寻找你想要的特征并提取它们

      【讨论】:

      • 除了非常特殊的情况外,这很可能更容易出错并且效率低。
      【解决方案5】:

      当然。
      如果您需要更好的方法 - 不要使用序列化数组。
      序列化只是一种传输格式,用途非常有限。

      如果您需要一些优化的变体 - 有数百个。
      例如,您可以传递一些单个标量变量而不是整个数组。并立即访问它

      【讨论】:

        【解决方案6】:

        我也认为正确的方法是反序列化。

        但是当你知道你想要从数组中得到什么时,另一种方法可能是使用字符串操作:

        $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 ?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-04
          • 1970-01-01
          • 2014-07-24
          • 2013-10-05
          • 1970-01-01
          • 1970-01-01
          • 2022-10-22
          • 1970-01-01
          相关资源
          最近更新 更多