PHP转到数组的下一个元素

时间:2012-11-28 13:18:23

标签: php arrays arraylist

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

<?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中给出的字符串

有人可以提供帮助吗?也许我试着做错了。

2 个答案:

答案 0 :(得分:1)

currentnextprevend函数可以使用数组本身并在数组上放置位置标记。如果你想使用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

答案 1 :(得分: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()