【问题标题】:How do i check if two values exist in a multidimensional array?如何检查多维数组中是否存在两个值?
【发布时间】:2021-05-21 10:19:21
【问题描述】:

我正在开发一个投票系统,每个用户每次投票可以投票一次。如果他们提交投票,它将被插入到polls_results table

为了检查用户是否已经提交了投票,我做了一个 sql 查询,从 polls_results 表中选择 * 并将结果放入数组中:

$query = 'SELECT * FROM polls_results';
$result = mysqli_query( $db, $query );
$array = array();
    
while( $row = mysqli_fetch_array( $result, MYSQLI_ASSOC ) ) {
    array_push( $array, $row );
}

这是包含我当前表数据的数组的输出。

Array
(
        [0] => Array
            (
                [result_id] => 132
                [poll_id] => 16
                [user_id] => 2
                [vote] => 0
            )
    
        [1] => Array
            (
                [result_id] => 133
                [poll_id] => 17
                [user_id] => 2
                [vote] => 0
            )
    
        [2] => Array
            (
                [result_id] => 131
                [poll_id] => 16
                [user_id] => 1
                [vote] => 1
            )
    
)

我的问题是如何检查我的多维数组中是否存在提交的投票?

我已经在 if 语句中尝试了两个 array_search 函数,但它只检查数组中是否存在 user_idpoll_id。但我希望它检查是否有一个项目将这两者结合在一起。

【问题讨论】:

  • 欢迎来到 SO!如果您可以将代码内联粘贴到问题中而不是链接到图像,那就太好了。也许您还阅读了有关minimal reproducible example 的文字。
  • 好的,谢谢!我将代码内联。

标签: php sql arrays if-statement multidimensional-array


【解决方案1】:

我想,要检查用户是否已经投票,您也可以使用 SQL 代替 PHP 内部的检查。

所以也许像这样检查user_idpoll_idvote

$userId = 1;
$pollId = 2;

$query = "SELECT * FROM `polls_results` WHERE `user_id`={$userId} AND `poll_id`={$pollId} AND `vote`=NULL";

会是更好的方法。如果有结果返回则用户没有投票。

如果 0=no 和 1=yes,那么我建议使用 NULL 作为 vote 列的默认值。因此,如果vote 列是NULL,则表示用户根本没有投票。我更新了我的查询来检查这个。

请注意,您应该清理 $userId$pollId,以免发生 SQL 注入。你应该检查PHP prepared statements

【讨论】:

  • 谢谢!但是我的数据库中的投票列是赞成或反对... 0 表示他们投反对票,1 表示他们投赞成票。那么我需要在查询中更改什么?
  • 我更新了我的答案来帮助你解决这个问题。
  • 好吧,我将“AND vote = NULL”部分更改为“AND vote != ' '” 现在它可以工作了!感谢您的帮助!
  • 很高兴你能弄明白。是的,检查空字符串vote != ' ' 也可能是一种解决方案。如果您喜欢我的答案标记为答案或投票。
【解决方案2】:

@codedge SQL 解决方案可能是您的情况的首选解决方案,但这里有一个如何搜索数组的简单示例:

function getVote(array $votes, int $userId, int $pollId): ?int
{
    foreach ($votes as $vote) {
        if ($vote['user_id'] === $userId && $vote['poll_id'] === $pollId) {
            return $vote['vote'];
        }
    }

    return null;
}

$vote = getVote($votesArray, 1, 16);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    相关资源
    最近更新 更多