【问题标题】:Replace array value with new one用新值替换数组值
【发布时间】:2017-11-07 02:13:34
【问题描述】:

我有数组,我想更改日期格式。我试图得到它如下

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');
}

这里的格式发生了变化,但它没有用新的替换数组值??为什么??

【问题讨论】:

    标签: php arrays laravel reference


    【解决方案1】:

    如果你想改变foreach中的值,你需要通过引用来访问它。

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

    【讨论】:

    • 完美..谢谢....但为什么会这样呢?我可以为对象做,但不能为数组做???为什么??
    【解决方案2】:

    您必须通过引用更改值:

    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】:

      您应该使用 refrence 运算符 & 来更改原始数组,否则 PHP 会将其视为与原始数组不同的本地 aary,并且该本地数组中的更改不会反映到原始数组。

      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');
      }
      

      【讨论】:

        【解决方案4】:

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

        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)这对于给定的例子是不必要的

        【讨论】:

          【解决方案5】:

          您也可以使用访问$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');
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-16
            • 2014-09-23
            • 1970-01-01
            • 2014-03-09
            • 1970-01-01
            • 2014-06-28
            • 1970-01-01
            相关资源
            最近更新 更多