【问题标题】:Php Merging Arrays on DatePhp 合并数组的日期
【发布时间】:2010-11-18 23:22:54
【问题描述】:

我有两个数组,我试图根据它们的日期合并它们。下面是数组的样子:

$a[0][0] = '11/15/08';
$a[0][1] = '50';
$a[1][0] = '11/20/08';
$a[1][1] = '75';
$a[2][0] = '01/04/09';
$a[2][1] = '23';
$a[3][0] = '01/09/09';
$a[3][1] = '92';

$b[0][0] = '01/04/09';
$b[0][1] = '30';
$b[1][0] = '01/05/09';
$b[1][1] = '54';
$b[2][0] = '01/08/09';
$b[2][1] = '89';
$b[3][0] = '01/09/09';
$a[3][1] = '62';

在我希望的合并结束时:

$n[0][0] = '11/15/08';
$n[0][1] = '50';
$n[0][2] = '0';
$n[1][0] = '11/20/08';
$n[1][1] = '75';
$n[1][2] = '0';
$n[2][0] = '01/04/09';
$n[2][1] = '23';
$n[2][2] = '30';
$n[3][0] = '01/05/09';
$n[3][1] = '0';
$n[3][2] = '54';
$n[4][0] = '01/08/09';
$n[4][1] = '0';
$n[4][2] = '89';
$n[4][0] = '01/09/09';
$n[4][1] = '92';
$n[4][2] = '62';

这可能吗?

【问题讨论】:

    标签: php function sorting merge


    【解决方案1】:

    我首先将数组排序为一个以时间戳为键,以数字数组为值的数组。这将很容易排序。例如:

    $result = array();
    foreach (array_merge($a, $b) as $item) {
        $date = $item[0];
        $dateParts = explode('/', $date);
        $timestamp = mktime(0,0,0,$dateParts[0], $dateParts[1], $dateParts[2]);
        if (!isset($result[$timestamp])) {
            $result[$timestamp] = array();
        }   
    
        $result[$timestamp][] = $item[1];
    }
    

    由于键是日期时间戳,我们可以很容易地按日期对数组进行排序:

    ksort($result);
    

    然后我们就可以把数组转换成你想要的格式了

    $result2 = array();
    foreach ($result as $timestamp => $item) {
        $tmp = array();
    
        $tmp[] = date('m/d/y', $timestamp);
        $tmp = array_merge($tmp, $item);
        $result2[] = $tmp;
    }
    
    print_r($result2);
    

    【讨论】:

      【解决方案2】:

      最简单的方法是使用日期作为索引

          #Initialization
      
          $n = array();
          $n[$date] = array();
          $n[$date][0] = "";
          $n[$date][1] = "";
      
          #and then
      
          $n["10/01/09"][0] = "10";
          $n["10/01/09"][1] = "50";
          $n["11/02/09"][1] = "70";
          $n["01/05/09"][0] = "90";
      

      ---编辑

      你可以在 "array_merge" , "array_combine", ...中看到这个函数,但在这种情况下,这是可以解决的

      【讨论】:

        【解决方案3】:

        这是我的解决方案:

        $a[0][0] = '11/15/08';
        $a[0][1] = '50';
        $a[1][0] = '11/20/08';
        $a[1][1] = '75';
        $a[2][0] = '01/04/09';
        $a[2][1] = '23';
        $a[3][0] = '01/09/09';
        $a[3][1] = '92';
        
        $b[0][0] = '01/04/09';
        $b[0][1] = '30';
        $b[1][0] = '01/05/09';
        $b[1][1] = '54';
        $b[2][0] = '01/08/09';
        $b[2][1] = '89';
        $b[3][0] = '01/09/09';
        $b[3][1] = '62';
        
        function dates($arr, &$result)
        {
            foreach ($arr as $dates)
            {
                $result[$dates[0]][] = $dates[1];
            }
        }
        
        $result = array();
        dates($a, $result);
        dates($b, $result);
        
        $dates = array();
        $i = 0;
        foreach ($result as $date => $res)
        {
            $dates[$i][0] = $date;
            $dates[$i][1] = $res[0];
            if (count($res) == 1)
            {
                $dates[$i][2] = 0;
            } else {
                $dates[$i][2] = $res[1];
            }
            $i++;
        }
        print_r($dates);
        

        输出:

        Array
        (
            [0] => Array
                (
                    [0] => 11/15/08
                    [1] => 50
                    [2] => 0
                )
        
            [1] => Array
                (
                    [0] => 11/20/08
                    [1] => 75
                    [2] => 0
                )
        
            [2] => Array
                (
                    [0] => 01/04/09
                    [1] => 23
                    [2] => 30
                )
        
            [3] => Array
                (
                    [0] => 01/09/09
                    [1] => 92
                    [2] => 62
                )
        
            [4] => Array
                (
                    [0] => 01/05/09
                    [1] => 54
                    [2] => 0
                )
        
            [5] => Array
                (
                    [0] => 01/08/09
                    [1] => 89
                    [2] => 0
                )
        
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-08
          • 1970-01-01
          • 2014-08-22
          • 2022-10-13
          • 1970-01-01
          相关资源
          最近更新 更多