0

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);
?>
4

2 回答 2

4

你调用prev后调用current,数组中的内部指针将超出范围。reset除非您调用或,否则它不会回来end

所以在你调用之后current,指针指向index 0,然后你调用了prev。指针超出范围,返回false

然后你调用next了 ,但是指针超出了范围,它不能移动到下一个,所以next也返回false

next就像prev,一旦指针超出范围,它就不会回来,除非你调用resetor end;

请参阅 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;
    }
于 2013-07-22T08:24:49.333 回答
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
于 2013-07-22T08:21:49.373 回答