计算购买水果时间

<?php
a = [ ['time' => 1, 'fruit' => 'apple_1',], ['time' => 5, 'fruit' => 'apple_2',], ['time' => 8, 'fruit' => 'apple_3',], ['time' => 11, 'fruit' => 'apple_4',], ['time' => 16, 'fruit' => 'apple_5',], ['time' => 17, 'fruit' => 'apple_6',], ['time' => 20, 'fruit' => 'apple_7',], ['time' => 24, 'fruit' => 'apple_8',], ['time' => 25, 'fruit' => 'apple_9',], ];b = [
['time' => 4, 'fruit' => 'banana_1', ],
['time' => 7, 'fruit' => 'banana_2', ],
['time' => 8, 'fruit' => 'banana_3', ],
['time' => 12, 'fruit' => 'banana_4', ],
['time' => 17, 'fruit' => 'banana_5', ],
['time' => 18, 'fruit' => 'banana_6', ],
['time' => 23, 'fruit' => 'banana_7', ],
['time' => 27, 'fruit' => 'banana_8', ],
];
c = [ ['time' => 1, 'fruit' => 'lemon_1', ], ['time' => 3, 'fruit' => 'lemon_2', ], ['time' => 5, 'fruit' => 'lemon_3', ], ['time' => 8, 'fruit' => 'lemon_4', ], ['time' => 13, 'fruit' => 'lemon_5', ], ['time' => 16, 'fruit' => 'lemon_6', ], ['time' => 21, 'fruit' => 'lemon_7', ], ['time' => 23, 'fruit' => 'lemon_8', ], ['time' => 29, 'fruit' => 'lemon_9', ], ];time_line = [3,7,12,16,19,23,26];

/**
a,b,c为三框水果上架的时间和水果编号的集合,time_line顾客进店的时间点集合,
顾客会购买最近上架或等待购买即将上架的水果(若上架时间与进店时间差和即将上架时间与进店时间差相等,且已上架的水果未被购买则购买已上架的水果),
每个时间点,都会在3框水果去购买
请计算出每个进店时间点顾客购买的水果有哪些。
例如前2个时间点购买的水果:[ 3=>['apple_1', 'banana_1', 'lemon_2', ], 7=>['apple_3', 'banana_2', 'lemon_4', ], ]

php版本语法兼容5.6
*/
//代码写在后面,写完后,点击左上角保存按钮,提示保存成功即可

function test(a,b, c,time_line){
arr_a = [];arr_b = [];
arr_c = [];result = [];

foreach($a as $val){
    $arr_a[$val['time']] = $val['fruit'];
}
unset($val);

foreach($b as $val){
    $arr_b[$val['time']] = $val['fruit'];
}
unset($val);

foreach($c as $val){
    $arr_c[$val['time']] = $val['fruit'];
}
unset($val);

foreach($time_line as $val){
    $res = [];
    
    if($val == isset($arr_a[$val])){
        $res[] = $arr_a[$val];
    }else{
        $res_val = common($val, $arr_a);
        $res[] = $res_val;
        unset($res_val);
    }
    unset($arr_a[$val]);
    
    
    if($val == isset($arr_b[$val])){
        $res[] = $arr_b[$val];
    }else{
        $res_val = common($val, $arr_b);
        $res[] = $res_val;
        unset($res_val);
    }
    unset($arr_b[$val]);
    
    
    if($val == isset($arr_c[$val])){
        $res[] = $arr_c[$val];
    }else{
        $res_val = common($val, $arr_c);
        $res[] = $res_val;
        unset($res_val);
    }
    unset($arr_c[$val]);
    
    $result[$val] = $res;
}
return $result;

}

function common(val,arr){
// 把当前val值push到key的数组中 重新排序 然后取出当前val计算得出应该取上还是下
arr_keys = array_keys(arr);
array_push(arr_keys,val);
sort($arr_keys);

$search_key = array_search($val, $arr_keys);
if($search_key - 1 < 0){
    $res_val = $arr[$arr_keys[$search_key+1]];
}else{
    if(abs($arr_keys[$search_key] - $arr_keys[$search_key+1]) >= $arr_keys[$search_key] - $arr_keys[$search_key-1]){
        $res_val = $arr[$arr_keys[$search_key-1]];
    }else{
        $res_val = $arr[$arr_keys[$search_key+1]];
    }
}
return $res_val;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。