Php 根据前两个级别收集第三级数据

Php 根据前两个级别收集第三级数据,php,recursion,big-o,nested-loops,Php,Recursion,Big O,Nested Loops,我通常不想放弃,但我觉得这样会更有效率,但就我的一生而言,我看不到这一点 我有一个网络服务,我可以从中请求车型,品牌和类型的汽车 但是为了能够要求我需要的型号,为了能够要求我需要的型号 因为我需要所有类型(最后一级)来迭代它们,并在不同的功能中使用它们,所以我需要执行以下3个步骤 唯一的问题是:我当前的代码大约需要3分钟才能完成,而且它感觉不正确,因为大O 如果你们能提高效率,我将永远感激你们: $cars = []; $makes = getMakes()['makes']['Make'];

我通常不想放弃,但我觉得这样会更有效率,但就我的一生而言,我看不到这一点

我有一个网络服务,我可以从中请求车型,品牌和类型的汽车

但是为了能够要求我需要的型号,为了能够要求我需要的型号

因为我需要所有类型(最后一级)来迭代它们,并在不同的功能中使用它们,所以我需要执行以下3个步骤

唯一的问题是:我当前的代码大约需要3分钟才能完成,而且它感觉不正确,因为大O

如果你们能提高效率,我将永远感激你们:

$cars = [];
$makes = getMakes()['makes']['Make'];
$models = [];
$types = [];
$allTypes = [];

$timeStart = microtime(true);
// Takes waaaaaay too long
foreach ($makes as $key => $make) {
    $cars[$key]['makeName'] = $make['makename'];
    $cars[$key]['makeCode'] = $make['makecode'];

    $models = getModels($make['makecode'])['models']['Model'];
    foreach ($models as $subKey => $model) {
        if (is_array($model)) {
            if (array_key_exists('modelname', $model)) {
                $cars[$key]['models'][$subKey]['modelName'] = $model['modelname'];
            }
            if (array_key_exists('modelcode', $model)) {
                $cars[$key]['models'][$subKey]['modelCode'] = $model['modelcode'];
            }

            $types = getTypes($model['modelcode']);
            foreach ($types as $ssKey => $type) {
                if (is_array($type)) {
                    if (array_key_exists('typecode', $type)) {
                        $cars[$key]['models'][$subKey]['types'][$ssKey]['typeCode'] = $type['typecode'];
                        $allTypes[] = $type['typecode'];
                    }
                }
            }
        }
    }
}
$timeEnd = microtime(true);
print_r(($timeEnd - $timeStart) / 60); // 3.228285531203 (~3 minutes)
// print_r($cars);

getMakes()、getModels()和getMakes()的实现是什么?只需一个api调用,就可以根据从数组中收到的代码(makecode和modelcode)获取信息,我可以编辑问题以添加完整的功能,它不会真正为您提供更多的信息,那么让我们从另一方面尝试:)您使用数据的目的是什么,以及数据源中的数据多久更改一次。您可以做的是进行定期检查,从源获取数据,并以您可以更有效地查询的格式本地存储/缓存数据。此外,我在这里假设api调用是花费大部分时间的地方,也许衡量一下这一点是个好主意,只是为了确定。基本上,它是一个脚本,对于大型导入只运行一次。但是,因为我想从我的错误中吸取教训,我想知道它是否可以优化如果API要求您提供make以查询模型和模型以查询类型,那么除了嵌套循环之外,没有其他真正的选择了。也许其他人能给我们两个启示:)