Я обычно не люблю сдаваться, но такое чувство, что это может быть более эффективным, но я не вижу этого в жизни.
У меня есть веб-сервис, с которого я могу запросить модели, марки и типы автомобилей.
Но чтобы иметь возможность запрашивать типы, которые мне нужны, нужны модели, а чтобы запрашивать модели, мне нужны модели …
Поскольку мне нужны ВСЕ типы (последний уровень) для их перебора и использования их в другой части функциональности, мне нужно выполнить эти 3 шага.
Единственная проблема: мой текущий код занимает около 3 минут, и он кажется неправильным из-за Big 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);
Задача ещё не решена.
Других решений пока нет …