prev()和next()不返回任何结果

时间:2013-07-22 08:05:35

标签: php javascript arrays

prev()next()不会返回任何结果,但current()end()reset()会在此处显示:

http://flamencopeko.net/songs_scans_skip_2.php
http://flamencopeko.net/songs_scans_skip_2.txt

<?php
   echo current($arrFiles);
?>
<br />prev: 
<?php
   echo prev($arrFiles);
?>
<br />next: 
<?php
   echo next($arrFiles);
?>
<br />end: 
<?php
   echo end($arrFiles);
?>
<br />reset: 
<?php
   echo reset($arrFiles);
?>

最终目标是使跳过按钮改变大扫描。有人说必须在JS中完成。我对PHP和JS都很好,但我完全没有看到如何编写所需的函数。


这使得数组:

<?php
$arrFiles = array_diff(scandir("scans", 0), array(".", ".."));
$arrFiles = array_values($arrFiles);
$intCountFiles = count($arrFiles);
?>

2 个答案:

答案 0 :(得分:4)

调用prev后调用current,数组中的内部指针将退出调用范围。除非您致电resetend,否则不会再回来。

因此,在您调用current后,指针指向index 0,然后您调用了prev。指针超出范围,并返回false

然后您拨打了next,但指针超出范围,无法移至下一个,因此next也会返回false

next的行为与prev类似,一旦指针超出范围,就不会再回来,除非您拨打resetend;

请参阅zend源代码,它解释说:

    ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)
    {
        HashPosition *current = pos ? pos : &ht->pInternalPointer;

        IS_CONSISTENT(ht);

        if (*current) {
            *current = (*current)->pListLast;
            return SUCCESS;
        } else
            return FAILURE;
    }

答案 1 :(得分:0)

请在array_values()方法之后打印$ arrayFiles数组,看看你得到了什么(正确的数组)。这些方法在PHP中正常工作,如下所示

$people = array("Peter", "Joe", "Glenn", "Cleveland");

echo current($people) . "<br />";
echo next($people) . "<br />";
echo prev($people). "<br />";
echo end($people). "<br />";
echo reset($people). "<br />";

// result
Peter
Joe
Peter
Cleveland
Peter