Гнездо foreach, как быть более эффективным - PullRequest
0 голосов
/ 11 марта 2019

Прежде всего, привет В настоящее время я делаю систему отчетов, которая занимает 6 полей (6 выборок, все из которых кратны).

Я получаю их входные данные в виде массива, и мне нужно обрабатывать каждое значение для каждого поля

Например, давайте дадим поля A, B и C.

Поле А имеет значения [1, 2, 3].

Поле B имеет значения [4,5,6].

Поле C имеет значения [7,8,9].

Мне нужно заставить код работать и возвращаться вот так

1-4-7
1-4-8
1-4-9
1-5-7
1-5-8
1-5-9
( And so on )

На самом деле, я делаю это, вкладывая несколько foreach'ов, но я считаю, что это неэффективно (на выполнение цикла уходит от 30 до 35 секунд (без учета MySQL Query, который я выполняю внутри него)

Существует ли более эффективный способ сделать это?

EDIT

По просьбе комментариев, я получил пример

// I'm ignoring SQL Injection since it is a example only
$status = explode("-", $_POST['status']);
$type = explode("-", $_POST['type']);
$store = explode("-", $_POST['store']);

foreach($status as $statusKey => $statusID) {
    foreach($type as $typeKey => $typeID) {
        foreach($store as $storeKey => $storeID) {
            echo $statusID." - ".$typeID." - ".$storeID.PHP_EOL;
        }
    }
}

1 Ответ

0 голосов
/ 11 марта 2019

Что вам нужно сделать, это подготовить оператор в циклах и выполнить его вне циклов, так что у вас будет что-то вроде этого:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Подробнее здесь: https://dev.mysql.com/doc/refman/8.0/en/insert.html

Без INSERT этот код должен быть очень быстрым, так как это очень простые операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...