我遇到了一个问题,其中下面的内容无法正常工作。
// 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 :(得分:0)
根据https://parse.com/docs/php_guide#queries,你需要提供一个数组,$ usernames是一个字符串。通过使用短阵列表示法,即方括号,您创建了一个恰好包含一个元素的数组,即字符串。你需要的是一个数组,其中有两个元素对应于两个感兴趣的值。
如果由于某种原因,您的数据仅在此类型的格式化字符串中可用,则需要将其转换为数组。至少有两种方法可以做到这一点:
<?php
$usernames = explode(",",str_replace("\"","","\"user1\",\"user2\""));
?>
这比它看起来要复杂得多。代码用空字符串替换包含每个值的引号。然后它通过指示逗号是分隔符来将字符串分解为两个。虽然我从未使用过Parse,但我希望您现在可以用$ usernames替换查询中的第二个参数,如下所示:
<?php
$query->notContainedIn("username", $usernames);
不要使用方括号,否则你将创建一个多维数组,其第一个元素包含数组$ usernames。
将所述字符串转换为数组的替代方法:
<?php
$string = "\"user1\",\"user2\"";
$tok = strtok($string, "\",");
$usernames = null;
while ($tok !== false) {
$usernames[] = "$tok";
$tok = strtok("\",");
}
$ usernames现在包含两个值,就像我之前提出的解决方案一样。虽然第二个解决方案涉及更多,但请注意它只使用一个函数而不是两个函数,因此它可能会产生更快的结果。您可以尝试这两种解决方案,对它们进行基准测试,然后选择您认为具有卓越性能的解决方案。
希望这有帮助。