2012-07-27 61 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擊敗了我!

相關問題