用PHP解析此app_data字符串格式的最佳方法


Best Way to Parse this app_data String Format with PHP?

给定以下格式的facebook URL:

....&app_data=eid~423423|pid~23982938|admin~1

我想要一个数组:

[ 'eid' => '423423', 'pid => '23982938', 'admin' => '1' ];

我就是这样做的:

$app_data = $signed_request['app_data']; parse_str(str_replace('~','=',str_replace('|','&',$app_data)), $app_data_params);

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

您可以使用preg_replace来消除对str_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_replace-http://php.net/manual/en/function.preg-replace.php
  • parse_str-http://php.net/manual/en/function.parse-str.php

尝试explode()

$appData = explode("|", $signed_request['app_data']);

这至少会给你

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;

还有另一种方法。啊,@克里斯打败我了!

//  incoming GET string
$_GET['app_data']= "eid~423423|pid~23982938|admin~1";
$bits = explode("|", $_GET['app_data']);
foreach( $bits as $bit ){
$res = explode('~', $bit);
$result[$res[0]] = $res[1];
}
var_dump($result);
array
'eid' => string '423423' (length=6)
'pid' => string '23982938' (length=8)
'admin' => string '1' (length=1)

但不确定速度是否更快。