PHP:拆分 cookie 值并计算部分

PHP: Split cookie value and count parts

我是 PHP 初学者,希望这里有人可以帮助我。

我有一个类似于以下示例的字符串,其中分隔符是下划线并且字符串的长度可以变化。 三位数字是ID,括号中的数字是计数。

示例: 101(2)_102(3)_103(5)

我正在寻找一种方法来拆分它,以便我可以访问每个 ID 和每个计数,以便将它们用于进一步的计算等。 我尝试使用 explode 但无法正常工作。

我的尝试:

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

我假设我需要在这里创建一个数组。

预期输出(示例): Total IDs: 3, total count: 10

有人能告诉我如何实现吗?

非常感谢,
麦克

您可以使用 preg_match_all to extract the id and count values and then count and 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

Demo on 3v4l.org

请注意,您可能会发现使用 id 值索引的计数数组更有用,您可以在 preg_match_all 的输出中使用 array_combine

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

Demo on 3v4l.org

稍微简单一点的版本应该也可以:

$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