遍历数组时如何优雅的修改键值

Python019

遍历数组时如何优雅的修改键值,第1张

这个$key跟for循环中的$key是两个概念了

比如:

$arr = ['k1'=>'v1','k2'=>'v2','k3'=>'v3']//取v2的值print_r($arr['k2'])$arr = ['v1','v2','v3']//取v2的值print_r($arr[1])//上面两个数组中,分别得到v2这个值所用的方法,有什么不同?

用foreach循环,可以得到数组中元素的key值跟value值,当然key值可以是数字,也可以是字符串啊

如果你想下一次循环,直接到$key=$key+10的时候,首先,如果$key是字符串,+10就会有错误

你可以:

1.循环一次,将用过的元素通过php函数array_splice()或unset()删除,剩下的可以再次循环

2.新建一个数组变量,用来你的操作

具体语言实现不同,这里是一些语言无关的点

如果你在遍历时往数组增加数据,会导致遍历不完整(因为增加了新成员长度变了),或者死循环(因为总是有新的进去)

如果在遍历时删除数据,则会导致数组访问越界(因为长度缩短了,指针指向了一个已经标示为空的区域)

如果你只是在遍历时修改这个节点本身的数据,一般来说是安全的(当然需要看具体场景)

终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。

http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas

以上是 ruby 文档,他给出了正确的用法:

a = Array.new(2) { Hash.new }