数组问题

时间:2011-06-27 11:50:02

标签: php mysql arrays

我遇到了以下代码的问题:

$ids = '"' . implode('", "', $crumbs) . '"';
$motd = array();
$dober = $db->query("SELECT id, name, msg, datetime FROM tbl_depts td INNER JOIN tbl_motd tm ON td.id = tm.deptid WHERE td.id IN (" . $ids . ")");

while ($row = $dober->fetch_array()) {
                $motd[] = $row;
      }

print_r揭示了这一点:

Array
(
[0] => Array
    (
        [0] => 1
        [id] => 1
        [1] => Management
        [name] => Management
        [2] => New Management Rule!
        [msg] => New Management Rule!
        [3] => 
        [datetime] => 
    )

[1] => Array
    (
        [0] => 2
        [id] => 2
        [1] => Human Resources
        [name] => Human Resources
        [2] => DPS
        [msg] => DPS
        [3] => 
        [datetime] => 
    )
)

因此,我无法使用此代码生成内容:

foreach ($motd[] as &$value) {

        if ($motd['msg'] != "") {
            if ($i == 0) {
                ?>


                <li><a href="#" title="content_<?php echo $value['id']; ?>"
                       class="tab active"><?php echo $value['name']; ?></a></li>
                <?
            } elseif ($i == $len - 1) {
                ?>
                <li><a href="#" title="content_<?php echo $value['id']; ?>"
                       class="tab"><?php echo $value['name']; ?></a></li>

                <?php } else { ?>
                <li><a href="#" title="content_<?php echo $value['id']; ?>"
                       class="tab"><?php echo $value['name']; ?></a></li>
                <?
            }
            $i++;
        }
    }

关于我在这里做错了什么想法?

编辑:如果您先阅读此内容,可能会更容易理解:Optimize this SQL query

3 个答案:

答案 0 :(得分:3)

首先 - 由于以下两行,您的代码将无效:

foreach ($motd[] as &$value) {
    if ($motd['msg'] != "") {

你应该在foreach中使用$ motd,而不是$ motd []并检查$ value ['msg'],而不是$ motd ['msg']

其次,尝试使用mysql_fetch_assoc而不是mysql_fetch_array

第三 - $ i没有初始值。

答案 1 :(得分:1)

1。)foreach ($motd[] as &$value) {可能存在问题     也许它应该是foreach ($motd as &$value) {

2。)我宁愿使用for()循环而不是foreach。

    for($a=0, $cnt=count($motd)-1; $a<=$cnt; $a++ )
    { 
        if($motd[$a]["msg"] != "" )
        { 
          #do something here 
        }
    }

答案 2 :(得分:1)

我稍微重写了你的代码。不需要多次定义整个HTML只因为它有一个小的变化(我只发现active)。

$i=0;
foreach ($motd as $value) {
    if ($value['msg'] != "") {

        $active = $i == 0 ? ' active' : ''; //based on the value of `$i`

        ?>
        <li>
        <a href="#" 
             title="content_<?php echo $value['id']; ?>"
             class="tab<?php echo $active?>"><?php echo $value['name']; ?></a></li>
        <?php

        $i++;
    }
}

正如我在前面的评论中指出的那样:

  1. foreach中您必须指定数组本身,您不需要[]
  2. 始终初始化您的$i
  3. 您不需要&$value,如果您想在foreach修改数组,则只需要该引用。