解析表达式之间没有分隔符的 key=value 赋值字符串

发布于 2024-11-24 09:15:13 字数 170 浏览 2 评论 0原文

我在 PHP 中有一个如下所示的字符串

$data = "ID=53KEY=23";

,我想将该字符串中的值分配给以下变量,

$id = 53;
$key = 23;

如何在 PHP 中执行此操作?

I have a string in PHP like the following

$data = "ID=53KEY=23";

and I want to assign the values from this string to following variables

$id = 53;
$key = 23;

How can I do this in PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梨涡少年 2024-12-01 09:15:13

此函数适用于更通用的键/值输入,而不仅仅是 ID/KEY

$input = "ID=53KEY=23";

$res = preg_split("/([[:upper:]]+)=([[:digit:]]+)/", $input, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
for ($i = 0 ; $i < count($res) ; $i += 2)
{
    $res[$i] = strtolower($res[$i]);
    $res[$i] = $res[$i+1];
}

//$id = 53
//$key = 23

This function will work for more generic key/value inputs, not just ID/KEY

$input = "ID=53KEY=23";

$res = preg_split("/([[:upper:]]+)=([[:digit:]]+)/", $input, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
for ($i = 0 ; $i < count($res) ; $i += 2)
{
    $res[$i] = strtolower($res[$i]);
    $res[$i] = $res[$i+1];
}

//$id = 53
//$key = 23
隔岸观火 2024-12-01 09:15:13

对于更通用的解决方案:

$data = "ID=53KEY=23AGE=318";
$array = array();
if(preg_match_all("/([A-Z]+)=(\d+)/", $data, $matches)) {
    $array = array_change_key_case(array_combine($matches[1], $matches[2]));
}

echo "ID: " . $array['id'] . ", KEY: " . $array['key'] . ", AGE: " . $array['age'];

For a more generic solution:

$data = "ID=53KEY=23AGE=318";
$array = array();
if(preg_match_all("/([A-Z]+)=(\d+)/", $data, $matches)) {
    $array = array_change_key_case(array_combine($matches[1], $matches[2]));
}

echo "ID: " . $array['id'] . ", KEY: " . $array['key'] . ", AGE: " . $array['age'];
梦在夏天 2024-12-01 09:15:13

试试这个:

$data = "ID=53KEY=23"; 

preg_match("/id=(?<id>\d+)&?key=(?<key>\d+)/i",$data,$array); 
$id = $array["id"]; // 53
$key = $array["key"]; //23
print("id = $id, key = $key\n");

Try this:

$data = "ID=53KEY=23"; 

preg_match("/id=(?<id>\d+)&?key=(?<key>\d+)/i",$data,$array); 
$id = $array["id"]; // 53
$key = $array["key"]; //23
print("id = $id, key = $key\n");
内心激荡 2024-12-01 09:15:13

没有可选表达式的可预测格式的字符串可以使用 sscanf() 进行解析,并且数值可以显式转换为数值类型。在这种情况下,使用 % 将数字转换为 int 类型值。

代码:(演示

$data = "ID=53KEY=23";
sscanf($data, 'ID=%dKEY=%d', $id, $key);
var_dump($id, $key);

输出:

int(53)
int(23)

Predictably formatted strings with no optional expressions can be parsed with sscanf() and numeric values can be explicitly cast as numeric types. In this case, use % to cast numbers as int type values.

Code: (Demo)

$data = "ID=53KEY=23";
sscanf($data, 'ID=%dKEY=%d', $id, $key);
var_dump($id, $key);

Output:

int(53)
int(23)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文