【发布时间】:2019-08-22 07:10:56
【问题描述】:
我遇到了类似的问题:PHP - How to format data for in_array。
我有一个comma separated list of URIs in 1 database field。所有 URI 都将用于排除数组,如 Cookie、URI、ID。排除的 Cookie 是硬编码的,但不是 URI。它们来自一个 DB Query,查询的结果可以是多个,但不能超过 10 或 20。那么,如果数据库中有超过 1 个 URI,查询的输出如何格式化?
$lsc_exclude_uri_query = xtDBquery("SELECT
lsc.option_value // URIs
FROM lsc_config lsc
WHERE lsc.option_id = 9");
while ($exclude_uri_query = xtc_db_fetch_array($lsc_exclude_uri_query)) {
if (xtc_not_null($exclude_uri_query['option_value'])) {
$uris = $exclude_uri_query['option_value'];
}
}
// This is the array of excludes
if (!isset($_COOKIE[$lsc_customer_login]) && !isset($_COOKIE[$lsc_admin]) && !strstr($PHP_SELF, 'result from db query')) {
}
【问题讨论】:
-
旧的explode() 函数怎么样?除此之外:规范化您的数据库结构。一列中以逗号分隔的字符串是不好的设计。
-
好主意,但没有多大帮助,因为我可以生成多个 !strstr($PHP_SELF, 'URI') 字符串。据我了解 explode 它会生成一个新数组,那么您认为 explode 可以提供什么帮助?我不能改变设计。 URI 必须在 1 db 字段中。
-
为什么不使用您其他问题的答案? FIND_IN_SET 非常适合作为您的问题的答案。爆炸的答案也很好:在一个大数组中分解所有结果集并使用 in_array() 对其进行检查。很简单。
-
使用另一个答案中的 FIND_IN_SET 是我的第一个想法,但不能用于此任务。我不比较其他答案中的值,并且我有超过 1 个结果。另一个答案总是只有 1 个结果。
-
如何处理多个结果?您已经有一个 while 循环。当结果集中包含您要搜索的项目时,使用一个标志会怎样?您是否尝试过将找到的结果集分解为一个大数组并使用 in_array() 进行检查的爆炸建议