在PHP中将值与字符串分开

时间:2015-04-19 21:40:51

标签: php

我有一个字符串逗号分隔,我希望在变量中获得2个值。我怎样才能实现它。

$responseData = "Data: invoice=1216,card=AMEX";

我正在寻找发票和卡的价值。

我尝试使用instring但没有获得我想要的价值。

2 个答案:

答案 0 :(得分:5)

的sscanf()

您可以使用sscanf()来实现此结果。

sscanf()采用与printf()相同的格式,允许您提供变量和预期的格式字符串,并返回匹配的结果。

For example

list($invoice, $card) = sscanf($responseData, "Data: invoice=%d,card=%s");
var_dump($invoice); // int(1216)
var_dump($card);    // string(4) "AMEX"

Mark Ba​​ker在上述评论中回答的社区维基。

爆炸()

您也可以通过使用explode()的分隔符拆分字符串来手动执行此操作。 Data:组件无关紧要,因此将其修剪掉,然后用逗号分割,然后按=拆分以获得密钥=>价值对。

For example

// Remove the Data: component
$responseData = ltrim($responseData, 'Data: ');

$example = array();
// Split by commas
foreach (explode(',', $responseData) as $value) {
    // Split by equals
    list ($k, $v) = explode('=', $value);
    $example[$k] = $v;
}

var_dump($example);
// array(2) {
//   ["invoice"]=>
//   string(4) "1216"
//   ["card"]=>
//   string(4) "AMEX"
// }

答案 1 :(得分:2)

的preg_match()

以下是使用命名子模式的 preg_match 版本:

$subject = 'Data: invoice=1216,card=AMEX';

$matches = [];

preg_match('/Data: invoice=(?<invoice>\d+),card=(?<card>\w+)/', $subject, $matches);

var_dump($matches['invoice']); // string(4) "1216"
var_dump($matches['card']);    // string(4) "AMEX"