php notContainedIn不识别数组参数

时间:2014-11-21 08:43:53

标签: php parse-platform

我遇到了一个问题,其中下面的内容无法正常工作。

// 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"]);

由于

1 个答案:

答案 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现在包含两个值,就像我之前提出的解决方案一样。虽然第二个解决方案涉及更多,但请注意它只使用一个函数而不是两个函数,因此它可能会产生更快的结果。您可以尝试这两种解决方案,对它们进行基准测试,然后选择您认为具有卓越性能的解决方案。

希望这有帮助。