2016-08-16 4 views
0

У меня есть эта строка:значения Выписки из многомерного массива

O:37:"Ivory\GoogleMap\Service\Base\Distance":2:{s:43:"Ivory\GoogleMap\Service\Base\Distancetext";s:6:"572 km";s:44:"Ivory\GoogleMap\Service\Base\Distancevalue";i:572343;} 

необходимость возврата только 572343 значения.

+2

1) 'unserialize()' it 2) Доступ к объекту – Rizier123

+0

Выглядит как обрезанная сериализованная строка php. Если у вас есть полная строка, используйте 'unserialize' для получения структуры массива. – Steve

+1

. Где вы получили эту строку? Возможно, лучший способ получить эту ценность. –

ответ

0

Это не массив, а объект Google, который был сериализован. Он ожидает, что у вас есть объект с именем Distance в пространстве имен Ivory\GoogleMap\Service\Base\.

Я нашел репозиторий github, который, кажется, справляется с этим.

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

str_replace(';}','',$string); 
$output = ''; 
for ($i = -1; is_numeric(substr($string, $i,1)); $i--) { 
    $output = substr($string, $i,1).$output; 
} 
echo $output; 

или вы могли бы попробовать explode с помощью «", я:». В качестве маркеров и захватить второй элемент

$pieces = explode('";i:', $string); 
$number = str_replace(';}','',$pieces[1]); 
echo $number; 

Или вы могли бы сделать что-то немного более стабильное с регулярным выражением (которое, как вы можете догадаться, я не люблю)

Update:... из ОП комментарии, кажется, что они на самом деле борются с помощью набора объектов Google Ivory, а не строка вообще это совершенно другой вопрос, однако , если бы это было строка, которую они должны были проанализировать, мой ответ помог бы.

+1

Решено использовать 2 петли foreach, как указано в документе. Затем получите объект propreties $ element-> getDistance(): .... теперь я отправляю другой вопрос, потому что он порождает проблему Json – rubenSousa