4

如何用数组计算 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'];
}
4

9 回答 9

1

正如您在“我正在调用 $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);

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

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

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

于 2013-12-21T22:43:34.613 回答
0

尝试这个:

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

$i>0变成$i=0

$wid [$i]我把它改成了$wid[$i]

于 2013-03-15T08:40:47.643 回答
0

使用 foreach 除了

$wids = get_wid($id);
foreach($wids as $wid )
{
  $wid1=$wid.'<br />';   
  $_SESSION['wid2']=$wid1;
  echo $_SESSION['wid2'];
}
于 2013-03-15T08:41:29.747 回答
0

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

$wid=get_wid($id);

$max1= count($wid);

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

{

$wid1=$wid [$i].'<br />';  

$_SESSION['wid2']=$wid1;

echo $_SESSION['wid2'];

}
于 2013-03-15T08:42:46.670 回答
0

只需从您以前的代码中签出即可

$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 数据的最后一行。希望这段代码对您有所帮助。

于 2014-01-11T22:08:16.367 回答
0
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']);

计数=>3

于 2013-03-15T08:44:23.130 回答
0

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

于 2013-11-22T16:12:53.660 回答
0
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++)

可能会解决您的问题。

于 2014-01-12T04:52:29.700 回答
0

它不清楚你在这里想要做什么

尝试这个

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] 的数组中还有什么?

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

于 2013-03-15T08:55:59.397 回答