给定以下格式的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.phpparse_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)
但不确定速度是否更快。