key($ProvincialCapitals) 返回的是数组 $ProvincialCapitals 的第一个键
有什么问题吗?

解决方案 »

  1.   

    你这个能输出$capital么,
    echo "The capital of " .key($ProvincialCapitals) . " is".$Capital."<br />\n";   这样吧
      

  2.   

    $key = key($ProvincialCapitals);
    foreach ($ProvincialCapitals as $Capital) {
    echo "The capital of " . $key . " is $Capital<br />\n";
    $key = key($ProvincialCapitals);
    next($ProvincialCapitals);
    }
    应该是 foreach 本身先执行了一次key函数 我猜的
      

  3.   

    foreach ($array as $value)每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步
    foreach ($array as $key=>$value)当前单元的键名也会在每次循环中被赋给变量 $key
    手册中原话:除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。 
      

  4.   

    详细简介参考这篇文章http://www.codesky.net/article/201306/181877.html 也就是说key()操作的是$ProvincialCapitals的拷贝,若果在第一个方法中不用next()【也是操作的数组拷贝】,那么key永远都是指向第二个值(应为在foreach是hashTable内部指针已经向前移动了) 。验证key()执行的是拷贝的问题很简单,用xdebug调试输出数组应用计数次数。在不用key()操作时,没有遍历当前元素都是1,用key是为2,遍历到时为3。遍历时给数组的&$value加上引用就不会去拷贝数组,就是直接引用数组.
      

  5.   

    foreach的运行过程是这样的,先不说next
    foreach($arr as $key=>$value) {
       //xxx
    }
    在( )中,已经把需要遍历的元素的key和value赋值给了$key和$value,赋值完毕后,key的指针已经指下下一个了(Prince Edward Island),这个过程是在{ }中代码执行前就完成的,所以你在{ }中调用key的时候会发现指针指向的是下一个而不是第一个