用PHP解析此app_数据字符串格式的最佳方法?
给定此格式的facebook URL:用PHP解析此app_数据字符串格式的最佳方法?,php,facebook,string,parsing,Php,Facebook,String,Parsing,给定此格式的facebook URL: …&app_data=eid~423423 | pid~23982938 | admin~1 我想要一个数组: ['eid'=>'423423','pid=>'23982938','admin'=>'1'] 我就是这样做的: $app_data=$signed_请求['app_data']; 解析_str(str_replace(“~”、“=”、str_replace(“|”、“&”、$app_data))、$app_data_参数) 有没有更好的方法来实
…&app_data=eid~423423 | pid~23982938 | admin~1
我想要一个数组:
['eid'=>'423423','pid=>'23982938','admin'=>'1']代码>
我就是这样做的:
$app_data=$signed_请求['app_data'];
解析_str(str_replace(“~”、“=”、str_replace(“|”、“&”、$app_data))、$app_data_参数)代码>
有没有更好的方法来实现这一点?试试explode()
那至少会给你
array(3) {
[0] => "eid~4234234",
[1] => "pid~23982398",
[2] => "admin~1"
}
但我不确定这是否更快
$_GET['app_data']= "eid~423423|pid~23982938|admin~1";
$a = str_replace('~','=', $_GET['app_data']);
$b = str_replace("|","&", $a);
parse_str($b);
echo $eid;
echo $pid;
echo $admin;
还有另一种方法。唉,@Chris打败了我 您可以使用preg\u replace
来消除对str\u replace
的两个调用,但我怀疑您是否会看到这样做对性能有任何好处。你已经在做的方式没有问题
$str = 'eid~423423|pid~23982938|admin~1';
parse_str(
preg_replace(
array('/\~/','/\|/'),
array('=','&'),
$str
),
$app_data_params
);
print_r($app_data_params);
// Array ( [eid] => 423423 [pid] => 23982938 [admin] => 1 )
文档
preg\u replace
-
parse_str
-
app_data=eid~423423给出app_data=>424423?那开斋节呢?它真的悄悄地掉了吗?谢谢,我的坏朋友。我更新了这个问题,你做这件事的方式一点问题也没有,坦率地说,这比你目前收到的任何一个建议都要好。它更好,我想有人会给出一个regexp解决方案来替换这两个str_replace.Eh。regex没有什么神奇之处,如果你将str\u replace
与preg\u replace
进行对比,我想你会发现更简单的str\u replace
将比regex功能更好。。。。超过五十万次迭代(以毫秒为单位)。这不会生成OP指定为其目标的关联数组。它也无法解析数据数组的序列化元素。@chris我在回答中提到了这一点。这就是你要做的。。。如果parse_str
不存在:
$_GET['app_data']= "eid~423423|pid~23982938|admin~1";
$a = str_replace('~','=', $_GET['app_data']);
$b = str_replace("|","&", $a);
parse_str($b);
echo $eid;
echo $pid;
echo $admin;
$str = 'eid~423423|pid~23982938|admin~1';
parse_str(
preg_replace(
array('/\~/','/\|/'),
array('=','&'),
$str
),
$app_data_params
);
print_r($app_data_params);
// Array ( [eid] => 423423 [pid] => 23982938 [admin] => 1 )