关于foreach的问题 key($ProvincialCapitals) 返回的是数组 $ProvincialCapitals 的第一个键有什么问题吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这个能输出$capital么,echo "The capital of " .key($ProvincialCapitals) . " is".$Capital."<br />\n"; 这样吧 $key = key($ProvincialCapitals);foreach ($ProvincialCapitals as $Capital) {echo "The capital of " . $key . " is $Capital<br />\n";$key = key($ProvincialCapitals);next($ProvincialCapitals);}应该是 foreach 本身先执行了一次key函数 我猜的 foreach ($array as $value)每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步foreach ($array as $key=>$value)当前单元的键名也会在每次循环中被赋给变量 $key手册中原话:除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。 详细简介参考这篇文章http://www.codesky.net/article/201306/181877.html 也就是说key()操作的是$ProvincialCapitals的拷贝,若果在第一个方法中不用next()【也是操作的数组拷贝】,那么key永远都是指向第二个值(应为在foreach是hashTable内部指针已经向前移动了) 。验证key()执行的是拷贝的问题很简单,用xdebug调试输出数组应用计数次数。在不用key()操作时,没有遍历当前元素都是1,用key是为2,遍历到时为3。遍历时给数组的&$value加上引用就不会去拷贝数组,就是直接引用数组. foreach的运行过程是这样的,先不说nextforeach($arr as $key=>$value) { //xxx}在( )中,已经把需要遍历的元素的key和value赋值给了$key和$value,赋值完毕后,key的指针已经指下下一个了(Prince Edward Island),这个过程是在{ }中代码执行前就完成的,所以你在{ }中调用key的时候会发现指针指向的是下一个而不是第一个 初学php,编程错误求助 怎么隐藏地址栏中的文件名 商城商品的商品号大家是怎样实现的 foreach里调用方法出错 access is denied int_set设置无效? 求一个日期的正则表达式 iconv 碰到全角的空格就歇菜了。。。郁闷。。 那位大虾有过php+oracle经验,给我看看我的SQL语句为何不能执行: 银联手机控件支付,ios有返回成功,后台php没有 thinkphp 字段映射问题 如何调用谷歌验证码,纯数字方式的?
echo "The capital of " .key($ProvincialCapitals) . " is".$Capital."<br />\n"; 这样吧
foreach ($ProvincialCapitals as $Capital) {
echo "The capital of " . $key . " is $Capital<br />\n";
$key = key($ProvincialCapitals);
next($ProvincialCapitals);
}
应该是 foreach 本身先执行了一次key函数 我猜的
foreach ($array as $key=>$value)当前单元的键名也会在每次循环中被赋给变量 $key
手册中原话:除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。
foreach($arr as $key=>$value) {
//xxx
}
在( )中,已经把需要遍历的元素的key和value赋值给了$key和$value,赋值完毕后,key的指针已经指下下一个了(Prince Edward Island),这个过程是在{ }中代码执行前就完成的,所以你在{ }中调用key的时候会发现指针指向的是下一个而不是第一个