【发布时间】:2015-10-13 06:35:54
【问题描述】:
我的简单循环采用坐标和地名列表,例如:
(59.436961) (24.753575) (Revel, Estonia) (Born)
(-34.847745) (138.507362) (Port Adelaide) (Disembarked)
(-33.177085) (138.010057) (Port Pirie) (Residence before enlistment)
它preg_splits 将它们放入数组 $coords,效果很好。然后我在 foreach 循环中遍历它们。我的问题是为什么会这样:
foreach ($coords as &$marker){
$marker = preg_split('/\\) \\(|\\(|\\)/', $marker, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($coords);
结果如下:
Array
(
[0] => Array
(
[0] => 59.436961
[1] => 24.753575
[2] => Revel, Estonia
[3] => Born
)
[1] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
[2] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
)
(请注意元素 [1] 和 [2] 是相同的)- 但是:
foreach ($coords as $marker){
$marker_array[] = preg_split('/\\) \\(|\\(|\\)/', $marker, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($marker_array);
结果如下:
Array
(
[0] => Array
(
[0] => 59.436961
[1] => 24.753575
[2] => Revel, Estonia
[3] => Born
)
[1] => Array
(
[0] => -34.847745
[1] => 138.507362
[2] => Port Adelaide
[3] => Disembarked
)
[2] => Array
(
[0] => -33.177085
[1] => 138.010057
[2] => Port Pirie
[3] => Residence before enlistment
)
)
当我尝试直接在循环中修改元素时,是否有什么我做错或不知道的事情?
【问题讨论】:
-
使用
for,而不是foreach。或者更好地使用array_walk。 -
两者的输出相同,见eval.in/403729和eval.in/403728,我看不出有什么问题
-
那么,当我将数组回显到 Javascript 中时,一定会发生一些事情 - 这个循环发生在 while 循环内,但回显发生在它之外是否很重要?
-
如果您需要帮助,请显示更多代码。
-
在
foreach循环之后直接执行unset($marker);;否则,如果您稍后在脚本中再次使用变量名称$marker,您将面临弄乱数据的高风险。