2014-11-21 221 views
0

我遇到了一個問題,其中下面的工作不正常,因爲我認爲它應該。php notContainedIn無法識別數組參數

// this will not work and $usernames appears empty 
$usernames = "\"user1\", \"user2\""; 
$query->notContainedIn("username", [$usernames]); 



// this does work 
$user1 = "user1"; 
$user2 = "user2"; 
$query->notContainedIn("username", ["$user1", "$user2"]); 

感謝

回答

0

根據https://parse.com/docs/php_guide#queries你需要提供一個數組,$用戶名是一個字符串。通過使用短數組符號,即方括號,您已經創建了一個只有一個元素的數組,即字符串。你需要的是一個有兩個元素的數組,對應於兩個感興趣的值。

如果由於某種原因,您的數據僅適用於此類型的格式化字符串,那麼您需要將其轉換爲數組。至少有兩種方法可以做到這一點:

<?php 
$usernames = explode(",",str_replace("\"","","\"user1\",\"user2\"")); 
?> 

這並不像看起來那麼複雜。代碼用空字符串替換包含每個值的引號。然後,通過指示逗號是分隔符,將字符串分解爲兩部分。雖然我從來沒有使用Parse的工作,我希望你可以在$現在的用戶名查詢替換第二個參數,如下所示:

<?php 
$query->notContainedIn("username", $usernames); 

不要使用方括號或您將創建一個多維數組,其第一個元素包含數組$ $ username。說字符串轉換爲數組的

替代方式:

<?php 
$string = "\"user1\",\"user2\""; 
$tok = strtok($string, "\","); 

$usernames = null; 
while ($tok !== false) { 
    $usernames[] = "$tok"; 
    $tok = strtok("\","); 
} 

$用戶名現在包含就像我提出的以前的解決方案兩個值。雖然第二種解決方案涉及更多,但請注意,它只使用一個函數而不是兩個函數,因此可能會產生更快的結果。您可以嘗試這兩種解決方案,對其進行基準測試,然後選擇您認爲具有卓越性能的解決方案。

希望這會有所幫助。

+0

謝謝沙龍,它非常完美! – Jason 2014-11-21 10:55:14