gpt4 book ai didi

php - array_intersect 和 array_unique 的不规则之处

转载 作者:行者123 更新时间:2023-11-29 12:10:28 26 4
gpt4 key购买 nike

我遇到了与 array_intersect 和 array_unique 的使用相关的不规则现象的问题。

请注意,这是一个旧环境,mysqli无法使用。

我的脚本的第一步中有四个 MySQL 查询。它们具有相同的以下结构:

$aid_1 = mysql_query("SELECT aid FROM xy WHERE (bid = '20' OR bid = '34') AND baseData BETWEEN $select_1 AND $select_2");

$select_1等等源自 HTML 选择列表(总共八个,一次两个作为一个范围的“from”和“to”)。这个程序运行良好,我检查了结果如下:

while($row_aid_1 = mysql_fetch_array(aid_1))
{
echo '</br> — ' . $row_aid_1['aid'] . '</br>';
}

这是发生违规行为的第二步。我想获取在第一步的所有四个查询的结果中找到的值。我意识到这一点如下:

while(($row_aid_1 = mysql_fetch_array($aid_1)) && ($row_aid_2 = mysql_fetch_array($aid_2)) && ($row_aid_3 = mysql_fetch_array($aid_3)) && ($row_aid_4 = mysql_fetch_array($aid_4)))
{
$aid_array = array($row_aid_1, $row_aid_2, $row_aid_3, $row_aid_4);
$aid_ai = call_user_func_array('array_intersect', $aid_array);
$aid_u = array_unique($aid_ai);

print_r('</br> — ' . $aid_u[0] . '</br>');

var_dump($aid_u);
}

再次,print_rvar_dump用于检查结果。关于array_intersect只要使用上述选择列表中的最低或最高值,这些就可以了。如果使用除最低/最高之外的其他值,则该功能仅有时有效。有时,日志会在倒数第二行 ( print_r('</br> — ' . $aid_u[0] . '</br>'); ) 中显示“PHP 通知:未定义索引”或“PHP 通知:未定义偏移量:0”。我无法弄清楚错误到底是什么,因为如上所述,它只是有时会发生。很明显,错误必须出现在第二步中的某个地方,因为第一个步骤在所有情况下都有效(如上所述进行交叉检查)并且索引/偏移量是在第一步中定义的。

我在 array_unique 之前尝试了使用 array_values 的中间步骤,但这不会改变任何东西。

array_unique根本不起作用。结果几乎总是打印两次。

如果有人能够理解并解释为什么索引或偏移量有时未定义以及为什么 array_unique 不起作用,我将非常感激。

最佳答案

您只是将每一行相交,而不是将所有结果作为一个组相交。仅当所有查询以相同顺序返回相同结果时,这才有效。

相反,对于每个查询,将其所有结果组成一个数组,然后将它们全部相交。

$aid1_results = array();
while ($row = mysql_fetch_assoc($aid_1)) {
$aid1_results[] = $row['aid'];
}
$aid2_results = array();
while ($row = mysql_fetch_assoc($aid_2)) {
$aid2_results[] = $row['aid'];
}
...
$aid_ai = array_intersect($aid1_results, $aid2_results, $aid3_results, $aid4_results);

您还可以使用 SQL 中的 JOIN 来完成此操作:

SELECT t1.aid
FROM (SELECT aid FROM ... WHERE ...) AS t1
JOIN (SELECT aid FROM ... WHERE ...) AS t2 ON t1.aid = t2.aid
JOIN (SELECT aid FROM ... WHERE ...) AS t3 ON t1.aid = t3.aid
JOIN (SELECT aid FROM ... WHERE ...) AS t4 ON t1.aid = t4.aid

关于php - array_intersect 和 array_unique 的不规则之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com