问题如下:
1 2 | <code>现有一个多级嵌套数组,如果用 foreach 遍历,那遍历的也只是数组的一个拷贝,无法修改原始数组的值,除非 $array [ $key ]这样,但是层级多了这样也是不方便的。
</code>
|
Salin selepas log masuk
Salin selepas log masuk
实际情况:
1 2 | <code>现在用多级数组储存着一些没有规律的数据,因为数据太杂太乱我没有用数据库而是直接采用json文件来存储,比较类似数组。现在要改动数据,很可能就是直接改动数组最底层的数据,我采用的是将查询的键发送到PHP后台,然后 foreach 遍历找到最终的键值。
</code>
|
Salin selepas log masuk
Salin selepas log masuk
求解:
1 2 | <code>如果继续用遍历数组的方法来修改,请问有没有什么更好的解决方案。
如果各位对于存储无规律数据有见解,求指教,我也觉得采用json文件来存储数据不太可靠。</code>
|
Salin selepas log masuk
Salin selepas log masuk
回复内容:
问题如下:
1 2 | <code>现有一个多级嵌套数组,如果用 foreach 遍历,那遍历的也只是数组的一个拷贝,无法修改原始数组的值,除非 $array [ $key ]这样,但是层级多了这样也是不方便的。
</code>
|
Salin selepas log masuk
Salin selepas log masuk
实际情况:
1 2 | <code>现在用多级数组储存着一些没有规律的数据,因为数据太杂太乱我没有用数据库而是直接采用json文件来存储,比较类似数组。现在要改动数据,很可能就是直接改动数组最底层的数据,我采用的是将查询的键发送到PHP后台,然后 foreach 遍历找到最终的键值。
</code>
|
Salin selepas log masuk
Salin selepas log masuk
求解:
1 2 | <code>如果继续用遍历数组的方法来修改,请问有没有什么更好的解决方案。
如果各位对于存储无规律数据有见解,求指教,我也觉得采用json文件来存储数据不太可靠。</code>
|
Salin selepas log masuk
Salin selepas log masuk
你的意思是遍历修改值还是什么。贴个代码给你参考参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <code>
public static function dotSet( array & $array , $key , $value )
{
if (null === $key ) {
return $array = $value ;
}
$keys = explode ( '.' , $key );
while ( count ( $keys ) > 1) {
$key = array_shift ( $keys );
if (!isset( $array [ $key ]) || ! is_array ( $array [ $key ])) {
$array [ $key ] = [];
}
$array = & $array [ $key ];
}
$array [ array_shift ( $keys )] = $value ;
return $array ;
}</code>
|
Salin selepas log masuk
使用 dotSet($array, "n.l.m.o", $value)
就能修改 $array['n']['l']['m']['o']
的值了
居然一进来就看到你了
foreach中可以使用引用
1 2 3 4 5 6 7 8 9 | <code> $arr = array ( array (1, 2, 3), array (2, 3, 4), array (3, 4, 5));
foreach ( $arr as & $v )
{
foreach ( $v as & $vv )
{
$vv = ++ $vv ;
}
}
print_r( $arr );</code>
|
Salin selepas log masuk