我的简单循环获取一个坐标和地名列表,例如:
(59.436961) (24.753575) (Revel, Estonia) (Born)
(-34.847745) (138.507362) (Port Adelaide) (Disembarked)
(-33.177085) (138.010057) (Port Pirie) (Residence before enlistment)
它preg_split
将它们放入数组$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
)
)
当我试图直接修改循环中的元素时,是否有什么地方我做错了,或者我不知道?
在PHP 5.6中,我看不到所描述的行为。如何解析原始列表?
当我运行时:
<?php
$coords = array('(59.436961) (24.753575) (Revel, Estonia) (Born)',
'(-34.847745) (138.507362) (Port Adelaide) (Disembarked)',
'(-33.177085) (138.010057) (Port Pirie) (Residence before enlistment)');
foreach ($coords as &$marker){
$marker = preg_split('/'') ''(|''(|'')/', $marker, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($d);
它给了我这个:
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
)
)
但我不会后悔使用这种疯狂的建筑!
如果您从文本中解析它,那么只需使用preg_match_all
和类似的模式:
'~'(()')'s*'(()')'s*'(()')'s*'(()')~mu'
即使您在数组中有数据,我强烈建议您使用preg_match
进行可预测的数据匹配,而不是使用preg_split
。但没有人在第一天成为大师