Здравствуйте, есть такие строки такого формата;
1#2017-10-26 09:28:16#538.4#0#
2#2017-10-26 09:28:16#540#0#
3#2017-10-26 09:28:16#538.5#0#
4#2017-10-26 09:28:16#530#0#
5#2017-10-26 09:28:16#530.5#0#
как выбрать цифры только между предпоследних решеток "#538.4#", "#540#", "#538.5#", с учетом того что количество цифр может меняться.
Цифры нужно извлекать вместе с решётками или без? Если без, то:
$str = '1#2017-10-26 09:28:16#538.4#0#';
$arr = explode('#', $str);
$num = $arr[2];
Для массива строк:
$strings = array(
'1#2017-10-26 09:28:16#538.4#0#',
'2#2017-10-26 09:28:16#540#0#',
'3#2017-10-26 09:28:16#538.5#0#',
);
$nums = array();
foreach ($strings as $str) {
$split = explode('#', $str);
$nums[] = $split[2];
}
Используйте регулярные выражения:
$array = [
'1#2017-10-26 09:28:16#538.4#0#',
'2#2017-10-26 09:28:16#540#0#',
'3#2017-10-26 09:28:16#538.5#0#',
'4#2017-10-26 09:28:16#530#0#',
'5#2017-10-26 09:28:16#530.5#0#'
];
$result = [];
foreach ($array as $str) {
preg_match('~#([\d.]+)#(?=\d)~', $str, $arr);
$result[] = $arr[1];
}
print_r($result);
Результат
Array (
[0] => 538.4
[1] => 540
[2] => 538.5
[3] => 530
[4] => 530.5
)
Можно попробовать еще такой вариант:
$str = '1#2017-10-26 09:28:16#538.4#0#
2#2017-10-26 09:28:16#540#0#
3#2017-10-26 09:28:16#538.5#0#
4#2017-10-26 09:28:16#530#0#
5#2017-10-26 09:28:16#530.5#0#';
preg_replace_callback('/#([0-9]*[.,]?[0-9]+)#/', function($s) {
var_dump($s[1]);
}, $str);
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники