Получение одного значения из сериализованного массива в PHP

Что бы вы сказали, это самый эффективный способ получить одно значение из массива. Я знаю, что это, я знаю, где это. В настоящее время я делаю это с:

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

Интересно, есть ли лучший способ.

Related of "Получение одного значения из сериализованного массива в PHP"

Вы делаете это хорошо, я не могу придумать лучшего способа, чем то, что вы делаете.

  • Вы несериализуете
  • Вы получаете массив
  • Вы получаете значение, указав индекс

Так можно это сделать.

Интересно, есть ли лучший способ.

Для примера, который вы даете с массивом, я думаю, что все в порядке.

Если в сериализованной строке содержатся данные и объекты, которые вы не хотите выполнять без инициализации (например, создание объектов, которые вы действительно не хотите), вы можете использовать библиотеку Serialized PHP, которая является полным парсером для сериализованных данных.

Он обеспечивает низкоуровневый доступ к сериализованным данным статически, поэтому вы можете извлекать только подмножество данных и / или манипулировать сериализованными данными без их повторной инициализации. Однако это слишком много для вашего примера, поскольку у вас есть только массив, и вам не нужно фильтровать / отличать слишком много, я думаю.

Его наиболее эффективный способ, который вы можете сделать, неэтериализовать и получать данные, если вам нужно оптимизировать, не хранить все переменные, сериализованные.

Также всегда есть способ проанализировать его с помощью регулярного выражения 🙂

Если вы не хотите обесценивать все это (что может быть дорогостоящим, особенно для более сложных объектов), вы можете просто сделать strpos и искать нужные вам функции и извлечь их

Конечно.
Если вам нужен лучший способ – НЕ ИСПОЛЬЗУЙТЕ сериализованные массивы.
Сериализация – это всего лишь транспортный формат, ОЧЕНЬ ограниченный.

Если вам нужен оптимизированный вариант – их сотни.
Например, вы можете передать некоторую единую скалярную переменную вместо целого массива. И получить доступ немедленно

Я тоже думаю, что правильный путь – унисеризировать.

Но другим способом может быть использование строковых операций, когда вы знаете, что хотите от массива:

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