用新的值替换数组值

时间:2017-06-06 07:15:40

标签: php arrays laravel reference

我有数组数组,我想更改日期格式。我想把它搞定如下

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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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');
}

答案 2 :(得分: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');
}

答案 3 :(得分: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');
}

注意如果您希望使用按引用传递,不要忘记在循环之后取消设置($ value),这对于给定的示例不是必需的

答案 4 :(得分: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');
}