2013-07-22 46 views
0

prev()next()回报没有结果,但current()end()reset()没有,你可以在这里看到:prev()和next()返回任何结果

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); 
?> 
+0

您可以包括'$ arrFiles'在你的问题的内容?谢谢。 – phant0m

+0

是的。该内容在文本和图像上都在页面上。我还发布了使这个数组成为现在的代码。 –

回答

0

请打印$ arrayFiles阵列array_values()方法后,看看你做了什么(正确的阵列)。这些方法都在PHP中正常工作,如expaling下面

$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 
+0

是不是我现在正在用'print_r(array_values($ arrFiles));'? –

+0

所以你得到什么结果 - print_r(array_values($ arrFiles)); ?? –

+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; 
    } 
+0

谢谢。这就说得通了。现在我觉得比昨天更加愚蠢,但拥有更多的知识。 –

+1

我用一些zend源代码更新了答案。 – srain

+0

这样做是有限的。 http://flamencopeko.net/songs_scans_skip_5.php :)现在我需要制作跳过功能。你确实指出了我正确的方向。 –