Php 直接修改foreach中的数组元素

Php 直接修改foreach中的数组元素,php,foreach,reference,Php,Foreach,Reference,我的简单循环使用坐标和地名列表,如下所示: (59.436961) (24.753575) (Revel, Estonia) (Born) (-34.847745) (138.507362) (Port Adelaide) (Disembarked) (-33.177085) (138.010057) (Port Pirie) (Residence before enlistment) 它preg_将它们拆分成数组$coords,效果非常好。然后我在foreach循环中迭代它们。我的问题是,为

我的简单循环使用坐标和地名列表,如下所示:

(59.436961) (24.753575) (Revel, Estonia) (Born)
(-34.847745) (138.507362) (Port Adelaide) (Disembarked)
(-33.177085) (138.010057) (Port Pirie) (Residence before enlistment)
preg_将它们拆分成数组$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
        )

)
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
        )

)
(注意,元素[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] => -34.847745
            [1] => 138.507362
            [2] => Port Adelaide
            [3] => Disembarked
        )

)
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
        )

)

当我试图直接修改循环中的元素时,是否有什么地方我做错了或不知道?

在PHP5.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);
但我不会再使用这种疯狂的结构了

如果您从文本解析它,那么只需将
preg\u match\u all
与如下模式一起使用:

'~\(()\)\s*\(()\)\s*\(()\)\s*\(()\)~mu'

即使数组中有数据,我强烈建议您使用
preg\u match
进行可预测的数据匹配,而不是
preg\u split
。但是没有人能在第一天就成为大师……

使用
表示
,而不是
表示每个
。或者最好使用
array\u walk
。两者都有相同的输出,请看,我没有看到任何问题。然后,当我将数组回送到Javascript中时,一定发生了一些事情-这个循环发生在while循环内,但回送发生在它之外,这可能很重要吗?如果需要帮助,请显示更多关于这个的代码。执行
取消设置($marker);
直接在
foreach
循环之后;否则,如果以后在脚本中再次使用变量名
$marker
,则很可能会弄乱数据。