1

我使用以下代码创建了一个数组列表:

<?php

$ids = array();

if (mysql_num_rows($query1))
{
    while ($result = mysql_fetch_assoc($query1))
    {
        $ids["{$result['user_id']}"] = $result;
    }
}
mysql_free_result($query1);

?>

现在,我需要从数组中读取两个元素。第一个是当前元素,第二个是数组的下一个元素。因此,简化的过程如下:

i=0: current_element (pos:0), next_element (pos:1)
i=1: current_element (pos:1), next_element (pos:2)
etc

为此,我已经编写了以下代码,但我无法为每个循环获取下一个元素!

这是代码:

if (count($ids)) 
{ 
    foreach ($ids AS $id => $data) 
    { 
        $userA=$data['user_id'];
        $userB=next($data['user_id']);
    }
}

我收到的消息是:警告:next() 期望参数 1 是数组,在第 X 行的 array.php 中给出的字符串

有人可以帮忙吗?也许我尝试做错了。

4

2 回答 2

1

, current, next,函数与数组本身一起工作,并在数组上放置一个位置标记prevend如果您想使用该next功能,也许这是代码:

if (is_array($ids)) 
{ 
    while(next($ids) !== FALSE) // make sure you still got a next element
    {
        prev($ids);             // move flag back because invoking 'next()' above moved the flag forward
        $userA = current($ids); // store the current element
        next($ids);             // move flag to next element
        $userB = current($ids); // store the current element
        echo('  userA='.$userA['user_id']);
        echo('; userB='.$userB['user_id']);
        echo("<br/>");
    }
}

您将在屏幕上看到以下文本:

userA=1; userB=2
userA=2; userB=3
userA=3; userB=4
userA=4; userB=5
userA=5; userB=6
userA=6; userB=7
userA=7; userB=8
于 2012-11-28T13:32:41.947 回答
0

你得到第一个项目,然后循环其余的项目,在每个循环结束时,你将当前项目作为下一个项目移动......代码应该更好地解释它:

if (false !== ($userA = current($ids))) {
    while (false !== ($userB = next($ids))) {
        // do stuff with $userA['user_id'] and $userB['user_id']
        $userA = $userB;
    }
}

上一个答案

您可以将数组分块成对:

foreach (array_chunk($ids, 2) as $pair) {
    $userA = $pair[0]['user_id']
    $userB = $pair[1]['user_id']; // may not exist if $ids size is uneven
}

也可以看看:array_chunk()

于 2012-11-28T13:21:28.640 回答