【问题标题】:replace a value in a multi dimention array- phap替换多维数组中的值 - php
【发布时间】:2013-08-31 12:01:19
【问题描述】:

我需要用开始和结束值的相应减法替换所有总值。值来自 sql 结果 任何帮助如何做到这一点? 例如:

12.30 - 5.00 = 7.30

15.30 - 7.00 = 8.30

16.30 - 9.00 = 7.30

现有数组

array(184) {
   [1]=>
      array(3) {
         ["start"]=>
         string(4) "5.00"
         ["end"]=>
         string(4) "12.30"
         ["total"]=>
         string(4) "1.00"
      }
   [2]=>
      array(3) {
         ["start"]=>
         string(4) "7.00"
         ["end"]=>
         string(4) "15.30"
         ["total"]=>
         string(4) "1.00"
      }
   [3]=>
      array(3) {
         ["start"]=>
         string(4) "9.00"
         ["end"]=>
         string(4) "16.30"
         ["total"]=>
         string(4) "1.00"
      }
    ... // more records are there
 }

替换最终数组

 array(184) {
    [1]=>
       array(3) {
        ["start"]=>
        string(4) "5.00"
        ["end"]=>
        string(4) "12.30"
        ["total"]=>
        string(4) "7.30"
    }
    [2]=>
      array(3) {
        ["start"]=>
        string(4) "7.00"
        ["end"]=>
        string(4) "15.30"
        ["total"]=>
        string(4) "8.30"
   }
   [3]=>
     array(3) {
       ["start"]=>
       string(4) "9.00"
       ["end"]=>
       string(4) "16.30"
       ["total"]=>
       string(4) "7.30"
   }
... // more records are there
 }

【问题讨论】:

  • 我们在这里区分时间还是基数(10)?例如 5.20 - 4.30 = 0.90 in base(10) 和 5.20 - 4.30 = 0.50 time wise。我想是时候了,但在我给你答案之前想确定一下(因为已经发布的两个答案都是基于小数,而不是时间)。
  • @MichalPrajsnar,你的观点很好。
  • 添加了基于时间的差异答案。

标签: php mysql multidimensional-array replace


【解决方案1】:
 for($i=1; $i<= count($my_array); $i++){

        $end= str_replace('.',':',$my_array[$i]['end']);
        $start = str_replace('.',':',$my_array[$i]['start']);

        $my_array[$i]['total']  =gmdate("H:i",strtotime($end)-strtotime($start));
    }

在这里,我使用 for 循环来更改数组中的所有匹配项。最后以 H:i 格式打印。

【讨论】:

    【解决方案2】:

    将此函数添加到您的代码中:

    function timeDiff($first, $second) {
        return str_replace(':', '.', 
            strtotime(str_replace('.', ':', $second)) - 
            strtotime(str_replace('.', ':', $first))
        );
    }
    

    然后将您的数组分配给$array 变量并使用Akam 的答案中提供的代码,只需将y-x 更改为timeDiff(x,y)

    foreach($array as &$v){
        $v['total'] = timeDiff($v['start'], $v['end']);
    }
    

    这应该可以解决问题:)

    【讨论】:

    • 非常感谢。我使用了您的方法并添加了更多我的方法,最后使它起作用。 :) 你们是石头 :)
    【解决方案3】:

    试试这个

    $array = array(
            array('start' => '5.00', 'end' => '12.30', 'total' => '1.00'),
            array('start' => '7.00', 'end' => '15.30', 'total' => '1.00'),
            array('start' => '9.00', 'end' => '16.30', 'total' => '1.00'),
       );
    
    foreach($array as $key=>$val){
         $array[$key]['total'] = $val['start']+$val['end'];
     }
    
     var_dump($array);
    

    【讨论】:

      【解决方案4】:

      你可以按照@Akam 的建议去做,或者你可以做很长的路

          $array = array(
              array('start' => '5.00', 'end' => '12.30', 'total' => '1.00'),
              array('start' => '7.00', 'end' => '15.30', 'total' => '1.00'),
              array('start' => '9.00', 'end' => '16.30', 'total' => '1.00'),
         );
      
          array_walk($array, 
              function(&$arr) { 
                 $arr['total'] = $arr['end'] - $arr['start']; 
              }
          );
      
         var_dump($array);
      

      【讨论】:

        【解决方案5】:

        试试这个:

        foreach($array as &$v){
         $v['total'] = $v['end']-$v['start'];
        }
        

        【讨论】:

        • 谢谢。我试试看
        • 消息:未定义索引:开始文件名:controllers/reports_generator.php。
        • $array 应该是你的数组变量名~
        • 因为你应该对每个包含“start”、“end”和“total”键的数组都这样做,而不仅仅是主数组一次......这并没有改变它获胜的事实不能为每个过去的日期工作,因为你不能简单地x-y 时间。它适用于您的示例,但不适用于我的示例(再次查看我的评论)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多