我有一个字符串逗号分隔,我希望在变量中获得2个值。我怎样才能实现它。
$responseData = "Data: invoice=1216,card=AMEX";
我正在寻找发票和卡的价值。
我尝试使用instring但没有获得我想要的价值。
答案 0 :(得分:5)
您可以使用sscanf()
来实现此结果。
sscanf()
采用与printf()
相同的格式,允许您提供变量和预期的格式字符串,并返回匹配的结果。
list($invoice, $card) = sscanf($responseData, "Data: invoice=%d,card=%s");
var_dump($invoice); // int(1216)
var_dump($card); // string(4) "AMEX"
Mark Baker在上述评论中回答的社区维基。
您也可以通过使用explode()
的分隔符拆分字符串来手动执行此操作。 Data:
组件无关紧要,因此将其修剪掉,然后用逗号分割,然后按=
拆分以获得密钥=>价值对。
// 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 版本:
$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"