0

给定一个具有这种格式的 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);

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

4

4 回答 4

0

试试explode()

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

这至少会给你

array(3) {
    [0] => "eid~4234234",
    [1] => "pid~23982398",
    [2] => "admin~1"
}
于 2012-07-27T14:52:00.613 回答
0
$_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;

还有另一种方法。Gaaah,@Chris 打败了我!

于 2012-07-27T15:12:38.810 回答
0

您可以使用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 ) 

文档

于 2012-07-27T15:21:35.113 回答
-1
//  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)

不确定这是否更快。

于 2012-07-27T15:03:40.120 回答