使用PHP从文本字符串中提取值


Extract values from text string using PHP?

使用Recurly API返回以下文本。我想弄清楚的是,用PHP从这个字符串中提取值并将其放入PHP变量中的最简单方法。

我在PHP手册中查看了各种查找文本的方法,但作为PHP的新手,在我找到值的位置后实际获取值的确切过程对我来说仍然不明显

例如,我如何提取plan_code的值,并删除该值周围的引号,使结果为$plan = 'starter'

定期订阅[href=https://api.recurly.com/v2/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxx]account=<Recurly_Stub[帐户]href=https://api.recurly.com/v2/accounts/1>,activated_at="2012-07-14 12:55:47+00:00",货币="美元",current_period_ends_at="2012-08-14 12:55:47+00:00",current_period_started_at="2012-07-14 12:55:47+00:00",plan="定期计划[href=https://api.recurly.com/v2/plans/starter]name="Starter",plan_code="Starter",setup_fee_in_cents="<Recurly_CurrentList[]>",unit_amount_in_cents="<Recurly_CurrentList[]>">",quantity=2,state="active",subscription_add_ons=[],unit_amount_in_cents=1200,uuid="1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3"

您可以使用Recurly的PHP API:

$result = Recurly_js::fetch($_POST['recurly_token']);
$plan = $result->plan_code;

令牌是一个订阅对象。然后,您可以检索有关帐户的其他信息及其计费信息,如下所示:

$account = $result->account->get();
$billing = $account->billing_info->get();

以与上面提取plan_code相同的方式从账户中检索字段(例如,账户持有人的名字)及其账单信息(例如,记录的信用卡号的最后4位)。

执行上述操作比在Recurly的文档中找到如何执行要容易得多!

一个技巧是将其转换为querystring语法并使用parse_str(原始,数组)。

$original = 'Recurly_Subscription[href=https://api.recurly.com/v2/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxx] account=, activated_at="2012-07-14 12:55:47 +00:00", currency="USD", current_period_ends_at="2012-08-14 12:55:47 +00:00", current_period_started_at="2012-07-14 12:55:47 +00:00", plan="Recurly_Plan[href=https://api.recurly.com/v2/plans/starter] name="Starter", plan_code="starter", setup_fee_in_cents="", unit_amount_in_cents="">", quantity=2, state="active", subscription_add_ons=[], unit_amount_in_cents=1200, uuid="1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3"';
$newstring = str_replace(", ", "&", $original);  // turns into querystring format &var=val
// you may need to use addslashes and/or replace the double quotes surrounding vars.

接下来使用parse_str,它构建了一个名称/值的关联数组:

parse_str($newstring, $myarray);

然后你可以打印出来,看看它的外观和调整:

print_r($myarray);

处理此问题的几种方法。

也许最简单的方法是:查看API,如果你能得到更符合标准的结果。PHP具有处理XML、JSON和其他几种格式的内置函数,因此您可以获得一个数组或对象,在该数组或对象上可以访问信息位。

使用这种格式的一种可能方法是:在,处分割、在=处再次分割以获得密钥=>值对。(不过,您可能需要剪切第一行,因为在那之后我看不到,。)草图,未经测试:

<?php $result = your_api_call();
$chunks = explode(',', $result);
$resultAsArray = array();
foreach ($chunks as $biggerPart) {
   $parts = explode('=', $biggerPart);
   $tmpKey = trim($parts[0]);
   $tmpValue = str_replace('"', '', $parts[1]);
   $resultAsArray[$tmpKey] = $tmpValue;
}
echo $resultAsArray['plan_code'];