PHP: разделить значение cookie и подсчитать части - PullRequest
1 голос
/ 13 октября 2019

Я новичок в PHP и надеюсь, что кто-то здесь может мне помочь с этим.

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

Пример: 101(2)_102(3)_103(5)

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

Моя попытка:

print_r(explode("_", $_COOKIE['myCookieName'])); 

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

Ожидаемый результат (пример): Total IDs: 3, total count: 10

Может кто-нибудь сказать мне, как этого добиться?

Заранее большое спасибо,
Mike

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Немного более простая версия, которая также должна работать:

$cookie = '101(2)_102(3)_103(5)';
preg_match_all('/\((\d+)\)/', $cookie, $matches);
[, $counts] = $matches;
echo 'Total IDs: ', count($counts), ', total count: ', array_sum($counts);

Демо: https://3v4l.org/PQ14O

1 голос
/ 13 октября 2019

Вы можете использовать preg_match_all для извлечения значений id и count, а затем count и sum их:

$cookie = '101(2)_102(3)_103(5)';
preg_match_all('/(?<=^|_)([^(]+)\((\d+)\)(?=_|$)/', $cookie, $matches);
$ids = $matches[1];
$counts = $matches[2];
echo "Total IDs: " . count($ids) . ", total count: " . array_sum($counts);

Вывод:

Total IDs: 3, total count: 10

Демонстрация на 3v4l.org

Обратите внимание, что может оказаться более полезным иметь массив счетчиковиндексируется значениями id, для которых вы можете использовать array_combine на выходе preg_match_all:

$counts = array_combine($matches[1], $matches[2]);
echo "Total IDs: " . count($counts) . ", total count: " . array_sum($counts). PHP_EOL;

Демонстрация на 3v4l.org

...