对于每个阵列修改

时间:2012-12-29 14:22:17

标签: php arrays

我有以下代码:

foreach ($animals as $animal) {
    $animal = getOffSpring($animal);
}

由于我将$ animal设置为新字符串,我还要修改数组吗?

我的运行表明我的数组保持不变,但我想用新值修改它。这是错误吗?

换句话说,我希望我的阵列中的所有动物都被修改为他们的后代

3 个答案:

答案 0 :(得分:4)

我认为你正试图这样做 当您使用$animal变量并将其传递给函数或在foreach循环内修改它时,您使用的是自变量,它不会以任何方式链接到$animals数组(如果您不要自己链接),因此应用的所有更改都不会导致修改$animals数组。

foreach ( $animals as $i => $animal )
{
    $animals[ $i ] = getOffSpring( $animal );
}

正如@AlecTMH在评论中提到的,array_map也是一种解决方案。

array_map( 'getOffSpring', $animals );

答案 1 :(得分:3)

您可以使用参考:

foreach ($animals as &$animal) {
    $animal = getOffSpring($animal);
}
unset($animal);

循环后unset清除引用。否则,在循环之后保留对$animal中最后一个数组元素的引用,如果您忘记了这一点,将导致恼人的问题,然后再使用$animal来做其他事情。

另一个选择是使用密钥替换它:

foreach ($animals as $key => $animal) {
    $animals[$key] = getOffSpring($animal);
}

答案 2 :(得分:0)

您可以使用对数组中值的引用

foreach ($animals as &$animal) {
    $animal = getOffSpring($animal);
}