用PHP解析此app_数据字符串格式的最佳方法?

用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_参数) 有没有更好的方法来实

给定此格式的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_参数)

有没有更好的方法来实现这一点?

试试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 )