用新值替换数组的值

3
我有一个数组,其中包含多个子数组,我想将日期格式进行更改。我尝试以下代码:
foreach ($toReturn as $value) {

    $start_date = new DateTime($value['start_date']);
    $value['start_date'] = $start_date->format('m-d-Y');

    $end_date = new DateTime($value['end_date']);
    $value['end_date'] = $end_date->format('m-d-Y');
}

格式被改变了,但它没有用新的值替换数组中的值?为什么?

5个回答

3

您需要通过引用来更改值:

foreach ($toReturn as &$value) {

    $start_date = new DateTime($value['start_date']);
    $value['start_date'] = $start_date->format('m-d-Y');

    $end_date = new DateTime($value['end_date']);
    $value['end_date'] = $end_date->format('m-d-Y');
}

3

如果您想在 foreach 中更改值,则需要通过引用访问它。

foreach ($toReturn as $value) 更改为 foreach ($toReturn as &$value)


非常好,谢谢。但是为什么呢?我可以对对象做到这一点,但不能对数组做到?为什么? - Vishal B

2

如果您想改变原始数组,应该使用引用运算符&。否则PHP会将其视为本地数组,这与原始数组不同,并且在该本地数组中所做的更改将无法反映到原始数组中。

foreach ($toReturn as &$value) {

    $start_date = new DateTime($value['start_date']);
    $value['start_date'] = $start_date->format('m-d-Y');

    $end_date = new DateTime($value['end_date']);
    $value['end_date'] = $end_date->format('m-d-Y');
}

1

如果您不想使用“按引用传递”方法,可以使用此方法,甚至创建新变量。

foreach ($toReturn as $key => $value) {

    $start_date = new DateTime($value['start_date']);
    $toReturn[$key]['start_date'] = $start_date->format('m-d-Y');

    $end_date = new DateTime($value['end_date']);
    $toReturn[$key]['end_date'] = $end_date->format('m-d-Y');
}

注意:如果你想使用按引用传递,请不要忘记在循环之后使用unset($value)。这对于给定的示例不是必需的。

1
您也可以使用访问 $toReturn[$index]
foreach ($toReturn as $index => $value) {

    $start_date = new DateTime($value['start_date']);
    $toReturn[$index]['start_date'] = $start_date->format('m-d-Y');

    $end_date = new DateTime($value['end_date']);
    $toReturn[$index]['end_date'] = $end_date->format('m-d-Y');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接