2014-11-21 129 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