我得到一个未定义的变量和未定义的索引通知我认为 isset()应该已经废除。在这个例子中,我通过一个由个人姓名及其公司组成的数据库进行阅读。我想把独特的公司分开,所以我知道他们有多少次代表。这就是我期待它做的事情:
然而, isset()似乎不起作用,因为PHP仍然向我发出关于该行代码的注意事项,并且我的变量和索引没有被定义。
$r1Q = mysql_query("SELECT * FROM totals", $db);
$r1C = mysql_num_rows($r1Q);
$r1 = mysql_fetch_array($r1Q);
$title = "Companies Most Represented in DB";
printf("
<div class=\"content\">
<h2>%s</h2>
<center>
<table border=1 bgcolor=#ffffff>
<tr bgcolor=#cc9933>
<th width=150>Company</th>
<th width=50>Times</th>
</tr>
", $title);
// loop through 1 time for each entry in the db
for($j=0;$j<$r1C;$j++) {
$company = $r1[4];
// have i seen this company before?
if(isset($comp[$company])) {
$cnt[$company]++;
$cnt1[$company]++;
}
else {
$comp[$company] = $r1[4];
$cnt[$company] = 1;
$cnt1[$company] = 1;
}
答案 0 :(得分:2)
您应该初始化数组:
在循环之前添加:
$comp = array();
$cnt = array();
$cnt1 = array();
答案 1 :(得分:0)
我认为问题不是你的isset()函数,而是你引用$r1
[4]之前的那一行。
for($j=0;$j<$r1C;$j++) {
$company = $r1[4];
我认为这个索引可能不存在,因为在下面的语句中,isset应该可以正常工作。
for($j=0;$j<$r1C;$j++) {
if(isset($r1[4])) {
$company = $r1[4];
}else{
// Handle Error
}
// Rest of your for statement
}
如果没有看到所有代码以及错误发生在哪一行,那么缩小范围要困难得多。许多错误发生在用户经常忘记查看或发布到网站上的情况。
答案 2 :(得分:0)
简单编辑if语句:
if(isset($comp[$company]) && $comp[$company] != false) { // edit was made here
$cnt[$company]++;
$cnt1[$company]++;
}
因为密钥可能存在但它可能没有值,所以它会从哪个增加?它不会假设0,因为它也可能是另一种类型。在PHP中,除0以外的任何数字都将等于false,因此您可以添加上面的其他比较来解决您的问题。
答案 3 :(得分:-1)
您需要指定该变量确实是PHP中的数组。
将此示例用于以下链接的文档:
$firstquarter = array('January', 'February', 'March');