首页 > 解决方案 > 如何在数组的 3 个级别中搜索?

问题描述

我有一个 Laravel 项目并且有 JSON 文件,并且想要在数组的第 3 级中搜索并在日期数组范围内返回第 1 级数组

我要搜索的这个数组

我使用这个功能:

public function search3($array, $key, $value){
$results = array();

if (is_array($array)) {
    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        $results = array_merge($results, self::search3($subarray, $key, $value));
    }
}

return $results;
}

并返回结果但不给我这个数组

在此处输入图像描述

我想要函数返回这个数组的父级的父级在哪里:

标签: phparrays

解决方案


我希望我能正确理解这一点;我认为您想在数组的第三级中搜索 'from' + date 或 'to' + date 组合,然后返回匹配的酒店(比匹配数据高两个级别)给定的组合。

这个怎么样?

function search3($hotels, $key, $value){
    $results = array();

    foreach ($hotels as $hotelKey => $hotelProperties) {

        foreach ($hotelProperties['availability'] as $availabilityKey => $range) {

            if (isset($range[$key]) && $range[$key] == $value) {
                $results[$hotelKey] = $hotels[$hotelKey];
            }

        }

    }

    return $results;
}

查找在给定日期范围内可用的酒店的更新,给定从和到日期:

function search3($hotels, $from, $to){

    $format = 'd-m-Y';
    $from = DateTime::createFromFormat($format, $from);
    $to = DateTime::createFromFormat($format, $to);

    $results = array();

    foreach ($hotels as $hotelKey => $hotelProperties) {

        foreach ($hotelProperties['availability'] as $range) {

            $availableFrom = DateTime::createFromFormat($format, $range['from']);
            $availableTo = DateTime::createFromFormat($format, $range['to']);

            if ($from >= $availableFrom && $to <= $availableTo) {
                $results[$hotelKey] = $hotelProperties;
            }

        }

    }

    return $results;
}

推荐阅读