2012-07-27 41 views
0

鉴于这种格式的Facebook网址:用PHP解析这个app_data字符串格式的最佳方法?

....&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);

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

+0

app_data文件= EID〜423423给出app_data文件=> 424423?那开斋节怎么样 - 是真的悄然下降了? – Cups 2012-07-27 14:53:04

+0

谢谢,我的坏。我更新了这个问题 – 2012-07-27 14:55:32

+0

这更有意义...... – Cups 2012-07-27 14:56:31

回答

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) 

文档

0

尝试爆炸()

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

这将至少给你

array(3) { 
    [0] => "eid~4234234", 
    [1] => "pid~23982398", 
    [2] => "admin~1" 
} 
+0

这不会产生OP指定为其目标的关联数组。它也无法解析数据数组的序列化元素。 – 2012-07-27 15:07:08

+0

@chris我在我的回答中提到过。 – Matt 2012-07-27 15:12:07

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

不知道这是任何更快,但。

+0

这就是你要做的......如果'parse_str'不存在。 :) – 2012-07-27 15:08:37

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击败了我!

相关问题