2014-02-07 34 views
1

我從NPP表單中獲得PayPal的迴應,因此我使用explode("&",$response)分隔出返回值,但我擔心將來如果將它們的字符串混合起來(如start它與ACK而不是TOKEN),我的代碼將返回錯誤的值。在字符串中查找值的首選方法 - PHP

我全碼:

list($token,$timestamp,$correlation,$ack,$version,$build) = explode("&",$response); 

的字符串看起來是這樣的:TOKEN=EC-3RC2692512364446&TIMESTAMP=2014-02-07T00:52:51Z&CORRELATIONID=e8467b1c30fb7&ACK=Success&VERSION=109.0&BUILD=9605603

上一個更好的方式去獲得這個字符串中的每個「串」的價值觀有什麼建議?我在想strstr甚至strpos但我不確定這一點。提前感謝您的幫助!

+1

"ACK"開始看起來你可以使用['parse_str()'](http://us1.php.net/manual/en/function.parse-str .php),因爲它類似於查詢字符串。 –

+0

任何可敬的API都應該有一個開發郵件列表,概述API版本的更改,遷移和保質期。希望您可以在任何應用程序發生變化之前保持領先。 –

回答

1
$results = array(); 
foreach (explode("&", $response) as $entry) { 
    list ($key, $val) = explode('=', $entry); 
    $results[strtolower($key)] = $val; 
} 

例如,您可以訪問$results['token']

您也可以使用parse_str(),它解析看起來像URL查詢字符串的數據。如果他們使用百分比編碼對特殊字符進行編碼,這將爲您處理。

+0

正是我知道我失蹤了!謝謝你的這個寶石。我正在閱讀這些php函數,很多東西要學習。我只是測試了以上,它的作用就像一個魅力。乾杯! – camelCase

1

您可以考慮使用variable variables

foreach(explode("&", $response) as $val){ 
$exp = explode("=", $val, 2); 
${strtolower($exp[0])} = $exp[1]; 
} 

然後你可以檢查是否變量已實際創建:

var_dump($token); 
var_dump($timestamp); 
var_dump($correlationid); 
var_dump($ack); 
var_dump($version); 
var_dump($build); 
1

你可能檢查結果變量的字符串長度,也如果它們包含特定的字符/數字等。如果字符串在未來混合並可能恢復某些不需要的操作,這將允許您收到通知。使用strlen來獲取並驗證字符串長度。

檢查$ack變量使用

strpos($ack, "ACK") === 0