【问题标题】:how do i count multiple rows in for loop with array?如何用数组计算 for 循环中的多行?
【发布时间】:2013-03-03 21:35:40
【问题描述】:

如何用数组计算 for 循环中的多行?当新行进入 mysql 数据库进行循环计数时,新行计数为 0 当两个新行进入 mysql 数据库进行循环计数时,两行都为 1?我不知道为什么for loop escape first row count start from second row? 还有我如何使用数组进行多行会话??

Function.php & Mysql 查询

function get_wid($id){
    $result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") 
                or die("Id Problem"."<br/><br/>".mysql_error());
    $results= array();
    while($row=mysql_fetch_array($result)){
        $results[] = $row['wid'];
    }
    return $results;
}

我调用的页面函数 $wid=get_wid($id);

$wid=get_wid($id);
$max1= count($wid);
for($i>0; $i<$max1; $i++)
{
    $wid1=$wid [$i].'<br />';   
    $_SESSION['wid2']=$wid1;
    echo $_SESSION['wid2'];
}

现在我正在使用这个函数,这个函数没有回显或打印 count 0 值没有显示但值在 count 1 之后显示?

function get_wid($id){
$result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") or die("Id     Problem"."<br/><br/>".mysql_error());
$results= array();
$i=1; // add the new line
while($row=mysql_fetch_array($result)){
$results[$i] = $row['wid'];
$i++;
}
return $results;
}

$wid=get_wid($id);
$max1= count($wid);
for($i=1; $i<=$max1; $i++) // changes made here
{
$wid1=$wid [$i].'<br />';   
$_SESSION['wid2']=$wid1;
echo $_SESSION['wid2'];
}

【问题讨论】:

    标签: php mysql database session for-loop


    【解决方案1】:
    for($i=1; $i<=$max1; $i++) // changes made here
    {
    $wid1=$wid [$i].'<br />';   
    $_SESSION['wid2']=$wid1;
    echo $_SESSION['wid2'];
    }
    

    我猜你是从第二行开始的,这就是为什么它没有显示第一行(第 0 行)

    变化

    for($i=1; $i<=$max1; $i++)
    

    for($i=0; $i<=$max1; $i++)
    

    可能会解决您的问题。

    【讨论】:

      【解决方案2】:

      只需从您之前的代码中签出此代码

      $wid=get_wid($id);
      $max1= count($wid);
      for($i=0; $i<=$max1; $i++)
      {
          $wid1=$wid [$i].'<br />';   
          $_SESSION['wid'.($i+1)]=$wid1;
      }
      
      print_r($_SESSION);
      

      我想在这里提一下,在您的代码中,您总是用新的会话替换之前的会话。所以你的会话总是显示你的 mysql 数据的最后一行。希望这段代码对您有所帮助。

      【讨论】:

        【解决方案3】:

        正如您在“我调用 $wid=get_wid($id); 的页面函数”中已经指出的那样:

        for($i>0; $i<$max1; $i++)
        {
            $wid1=$wid [$i].'<br />';   
            $_SESSION['wid2']=$wid1;
            echo $_SESSION['wid2'];
        }
        

        $i>0 应该是 $i=0

        我确定这只是一个错字,但您没有声明迭代的开始,这就是为什么它只在第一次之后才开始处理。我个人会按照标准保持从 0 开始的所有内容。

        光看我也可以告诉你,这件作品:

        $results=array();
        $i=1; // add the new line
        while($row=mysql_fetch_array($result)){
        $results[$i] = $row['wid'];
        $i++;
        }
        

        这样会好很多:

        $results=array();
        while($row=mysql_fetch_array($result)){
        $results[] = $row['wid'];
        }
        

        这会让它更紧。另一个“整洁”的技巧是将“_arr”添加到所有数组变量中,以便您知道何时引用字符串或数组,例如

        while($row=mysql_fetch_array($result)){
        $results_arr[] = $row['wid'];
        }
        

        虽然我不知道你想要达到什么目的,但我可以说你应该使用 foreach 来循环 $wid。如前所述,当迭代从 0 开始时,一切都会变得更容易,因为您可以这样做:

        $wid=get_wid($id);
        
        foreach($wid as $newWid) // changes made here
        {  
        $_SESSION['wid2']=$newWid.'<br />';
        echo $_SESSION['wid2'];
        }
        

        如果您想获取任何索引或特定值,您可以使用array_keysarray_search 等。最后,就像您对函数“get_wid”所做的那样,我将从函数中调用其他代码。以下是我总共要做的事情:

        function get_wid($id){
        $result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") or die("Id     Problem"."<br/><br/>".mysql_error());
        $results_arr= array();
        while($row=mysql_fetch_array($result)){
        $results_arr[] = $row['wid'];
        }
        return $results_arr;
        }
        
        function sessionWid($id) {
        $wid_arr=get_wid($id);
        foreach($wid_arr as $wid) // changes made here
        {  
        $_SESSION['wid2']=$wid.'<br />';
        echo $_SESSION['wid2'];
        }
        
        // call sessionWid($id) where you want
        sessionWid($id);
        

        我本来打算把它留在那里,但不知道你为什么要在会话中使用分页符 - &lt;br /&gt;。你知道如果你想在每个数组值之间有一个分页符,你可以像这样输出它:

        echo implode('<br />',get_wid($id));
        

        通过保持清洁,您肯定可以节省时间,避免可能会杀死一个人的小错误!_g

        【讨论】:

          【解决方案4】:

          在 for 循环中设置 $i = 0 它将开始在 0 处显示数组中的记录

          【讨论】:

            【解决方案5】:
            function get_wid($id){
            $result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") or die("Id Problem"."<br/><br/>".mysql_error());
            $results= array();
            $i=1; // add the new line
            while($row=mysql_fetch_array($result)){
            $results[$i] = $row['wid'];
            $i++;
            }
            return $results;
            }
            
            $wid=get_wid($id);
            $max1= count($wid);
            for($i=1; $i<=$max1; $i++) // changes made here
            {
            $wid1=$wid [$i-1].'<br />';   
            $_SESSION['wid2'][$i]=$wid1;
            echo $_SESSION['wid2'];
            }
            

            查询返回 3 条记录意味着 现在,

            $results[1]='1';
            $results[2]='2';
            $results[3]='3';
            echo count($wid);
            
            
            print_r($_SESSION['wid2']);
            Array ( [1] => 1 [2] => 2 [3] => 3)
            
            $_SESSION['wid2'][1]='1';
            $_SESSION['wid2'][2]='2';
            $_SESSION['wid2'][3]='3';
            

            它返回所有的值。如果你需要 $_SESSION['wid2'] 的计数

            echo count($_SESSION['wid2']);
            

            count=>3

            【讨论】:

            • for循环转义第一行计数从第二行开始
            • 我使用了你的函数 $wid=get_wid($id); $max1=计数($wid); for($i=0; $i'; $_SESSION['wid2']=$wid1;回声 $_SESSION['wid2']; } 为什么它是转义 0 值?
            • for($i=1; $i'; $_SESSION['wid2']=$wid1;回声 $_SESSION['wid2']; }//现在它的工作,请检查这个。
            【解决方案6】:

            不清楚你到底想在这里做什么

            试试这个

            for($i=0; $i<count(get_wid($id)); $i++)
            {
            echo $i;
             }
            

            它将回显 0,1,2,3,……最多 1-count(get_wid($id)

            $wid[0],$wid[1],$wid[2] 的数组中还有什么?

            每次都会回显该索引处的任何内容。 希望这会有所帮助。

            【讨论】:

            • 是的,问题很可能包含在数据库列中。只需看看 pid =$id 的愿望清单中的 id 列中的内容。
            • aah,我认为您需要做一些关于数组和 for 循环的教程,这可能是最好的方法。然后回到你的问题
            【解决方案7】:

            检查是否在外面声明了 $i 变量

            $wid=get_wid($id);
            
            $max1= count($wid);
            
            for($i=0; $i<$max1; $i++)
            
            {
            
            $wid1=$wid [$i].'<br />';  
            
            $_SESSION['wid2']=$wid1;
            
            echo $_SESSION['wid2'];
            
            }
            

            【讨论】:

            • 仍然为循环转义第一行计数从第二行开始
            【解决方案8】:

            使用 foreach 除外

            $wids = get_wid($id);
            foreach($wids as $wid )
            {
              $wid1=$wid.'<br />';   
              $_SESSION['wid2']=$wid1;
              echo $_SESSION['wid2'];
            }
            

            【讨论】:

            • 仍然为循环转义第一行计数从第二行开始
            • 使用var_export($wids)查看整个数组信息。也许问题取决于数据库信息
            【解决方案9】:

            试试这个:

            for($i=0; $i<count(get_wid($id)); $i++)
            {
               $wid1=$wid[$i].'<br />';   
               $_SESSION['wid2']=$wid1;
               echo $_SESSION['wid2'];
            }
            

            $i&gt;0改为$i=0

            $wid [$i] 里面有个空格,我改成$wid[$i]

            【讨论】:

              猜你喜欢
              • 2019-09-16
              • 2022-10-24
              • 1970-01-01
              • 2014-04-10
              • 1970-01-01
              • 2017-05-21
              • 2012-11-01
              • 2020-12-26
              • 1970-01-01
              相关资源
              最近更新 更多