如何结合两个数组和推值?

时间:2019-01-17 11:07:06

标签: php arrays loops

我有两个不同的数组

$dates =  [
  0 => "2019-01-17",
  1 => "2019-01-16",
  2 => "2019-01-15",
  3 => "2019-01-14",
  4 => "2019-01-13",
  5 => "2019-01-12",
  6 => "2019-01-11",
  7 => "2019-01-10"
]

以下是动态的,可以有所不同,但让我们看一个示例

$Fresh_Record =  [
    "date" => array:2 [
        0 => "2019-01-10"
        1 => "2019-01-14"
    ]
    "counter" => array:2 [
        0 => 1000.0
        1 => 500.0
    ]
]

如您所见,上面的数组包含日期和counter。如您所知,计数器1000.0用于2019-01-10,而500用于2019-01-14

这些只是可用的记录,但我需要最近7天的记录。因此,如果任何日期没有可用记录,我想添加0

我正在尝试并尝试了很多,但是仍然未能实现。

首次尝试

$ARR_1 = array();

        foreach($result as $AA){
            $data['counter'][] = 0;
        }

        $MERGE = array_merge($data['counter'],$yAxis_ARR);

        $MAIN = [
            'date' => $d,
            'counter' => $MERGE 
        ];

其他尝试

$index = 0;
foreach($d as $single){

    if(!in_array($single,$Fresh_Record['date'])){
        if(count($Fresh_Record['date']) >= $index){
            $map_array['date'] = $Fresh_Record['date'][$index];
            $map_array['counter'] = 0;
        }
    }

    $index++;
}

帮助

我真的需要指导来解决它。请指导我。非常感谢。

我想像下面这样

$map_array =  [
        "date" => [
          0 => "2019-01-17",
          1 => "2019-01-16",
          2 => "2019-01-15",
          3 => "2019-01-14",
          4 => "2019-01-13",
          5 => "2019-01-12",
          6 => "2019-01-11""
        ]
        "counter" => [
            0 => 1000.0,
            1 => 500.0,
            2 => 0,
            3 => 0,
            4 => 0,
            5 => 0,
            6 => 0
        ]
    ]

2 个答案:

答案 0 :(得分:2)

您可以使用array_search检查日期是否存在索引,并将相同的索引用于Fresh_Record中的计数器:

<?php
$dates =  [
  0 => "2019-01-17",
  1 => "2019-01-16",
  2 => "2019-01-15",
  3 => "2019-01-14",
  4 => "2019-01-13",
  5 => "2019-01-12",
  6 => "2019-01-11",
  7 => "2019-01-10"
];

$Fresh_Record =  [
    "date" =>  [
        0 => "2019-01-10",
        1 => "2019-01-14"
    ],
    "counter" =>  [
        0 => 1000.0,
        1 => 500.0
    ]
];

foreach($dates as $date){
    $map_array['date'][] = $date;
    $index = array_search($date, $Fresh_Record['date']);
    if($index !== false){
        $map_array['counter'][] = $Fresh_Record['counter'][$index];
    } else {
        $map_array['counter'][] = 0;
    }
}

print_r($map_array);

将输出:

Array
(
    [date] => Array
        (
            [0] => 2019-01-17
            [1] => 2019-01-16
            [2] => 2019-01-15
            [3] => 2019-01-14
            [4] => 2019-01-13
            [5] => 2019-01-12
            [6] => 2019-01-11
            [7] => 2019-01-10
        )

    [counter] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 500
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 1000
        )

)

答案 1 :(得分:0)

下面的代码段应该起作用

<?php
$dates =  [
    0 => "2019-01-17",
    1 => "2019-01-16",
    2 => "2019-01-15",
    3 => "2019-01-14",
    4 => "2019-01-13",
    5 => "2019-01-12",
    6 => "2019-01-11",
    7 => "2019-01-10"
];

$Fresh_Record =  [
    "date" => [
        0 => "2019-01-10",
        1 => "2019-01-14"
    ],
    "counter" => [
        0 => 1000.0,
        1 => 500.0
    ]
];

$arrayMap = [
    'date' => [],
    'counter' => []
];

foreach($dates as $index => $date){
    $count = 0;
    $foundIndex = array_search($date, $Fresh_Record['date']);

    if ($foundIndex !== false) {
        $count = $Fresh_Record['counter'][$foundIndex];
    }
    $arrayMap['date'][$index] = $date;
    $arrayMap['counter'][$index] = $count;
}

var_dump($arrayMap);