Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL:将MySQL查询结果与PHP数组匹配_Php_Mysql_Arrays - Fatal编程技术网

PHP MySQL:将MySQL查询结果与PHP数组匹配

PHP MySQL:将MySQL查询结果与PHP数组匹配,php,mysql,arrays,Php,Mysql,Arrays,我的数据库中有一些数据: id_tag | tag ------------ 1 | Dog 2 | Cat 3 | Buldog 4 | Persian Cat 然后我有一个参数: $tag = "2, 4"; 我想在复选框中显示所有标记。如果id_标记等于$tag参数。 我有一个想法: echo "<div class='btn-group' data-toggle='buttons'>"; $thetag = explode(", "

我的数据库中有一些数据:

id_tag | tag
------------
1      | Dog
2      | Cat
3      | Buldog
4      | Persian Cat
然后我有一个参数:

$tag = "2, 4";
我想在复选框中显示所有标记。如果id_标记等于$tag参数。 我有一个想法:

echo "<div class='btn-group' data-toggle='buttons'>";
$thetag = explode(", ", $tag);
$tagall = mysql_query("SELECT * FROM tags");
if(mysql_num_rows($tagall) > 0)
{
    while($tagt = mysql_fetch_array($tagall))
    {
        foreach($thetag as $ttg)
        {
            if($tagt['id_tags'] == $ttg)
            {
                $aktiv = "active";
                $ceked = "checked";
            }
            else
            {
                $aktiv = "";
                $ceked = "";
            }
        }
        echo "<label class='btn btn-primary {$aktiv}'><input type='checkbox' value='{$tagt['id_tags']}' autocomplete='off' {$ceked}> {$tagt['tag']}</label>";
    }
}
echo "</div>";
波斯猫处于激活和检查状态


结果我需要的是猫和波斯猫活跃和检查。请帮帮我

当然是这样,因为您在这里所做的是在主循环中毫无意义地循环
$tag
,每次您重写以前存储的信息时,只使用最后一个

以下是解决方案之一:

while($tagt = mysql_fetch_array($tagall))
    {
         if(in_array($tagt['id_tag'], $thetag))
            {
                $aktiv = "active";
                $ceked = "checked";
            }
            else
            {
                $aktiv = "";
                $ceked = "";
            }
        echo "<label class='btn btn-primary {$aktiv}'><input type='checkbox' value='{$tagt['id_tag']}' autocomplete='off' {$ceked}> {$tagt['tag']}</label>";
    }
while($tagt=mysql\u fetch\u数组($tagall))
{
if(在数组中($tagt['id\u tag',$thetag))
{
$aktiv=“活动”;
$ceked=“已检查”;
}
其他的
{
$aktiv=“”;
$ceked=“”;
}
回显“{$tagt['tag']}”;
}

另外,请。

问题是,您的
foreach($ttg的标签)
循环在找到匹配项后继续循环。如果下一次迭代不匹配,它会将
$aktiv
$ceked
设置回空字符串。这些变量的最终值只是基于
$tagt['id_tags']
是否匹配
$thetag
的最后一个元素,而不是它是否匹配其中任何一个。您可以在设置
$ceked=“checked”后放置
break
来解决此问题

但更简单的方法是:

if (in_array($tagt['id_tags'], $thetag)) {
    $aktiv = "active";
    $ceked = "checked";
} else {
    $aktiv = "";
    $ceked = "checked";
}

使用checked=“checked”为什么将波斯猫和猫分为两类?猫应该吃波斯猫。我想你可以在标签上查找“Cat”,如果有匹配项,则将其设置为checkedPersian是子类别wow。。。我没有想到in_数组。我只是把重点放在了foreach上。谢谢各位。你太棒了。
if (in_array($tagt['id_tags'], $thetag)) {
    $aktiv = "active";
    $ceked = "checked";
} else {
    $aktiv = "";
    $ceked = "checked";
}