Производительность PHP - функции массива против вызовов базы данных, какая логика лучше? - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть интересная проблема с несколькими различными способами ее решения. Я создаю страницу отчетов для небольшого инструмента, который берет результаты команд, запущенных из командной строки, и разбивает сводную информацию на более удобные для чтения таблицы.

Мой код начинается с запуска cmd и фильтрации некоторого ввода. Я запускаю это в Windows, поэтому он использует поиск вместо grep.

Вот пример нескольких строк, которые я могу получить из команды, каждая строка возвращается как элемент в массиве:

Client client1 2011/06/16 root /appl/now 'area1: info'
Client client2 2011/06/16 root /appl/now 'area2: adds'
Client client3 2011/06/16 root /appl/now 'area3: text'
Client client4 2011/06/16 root /appl/now 'area4: text'
Client client5 2011/06/16 root /appl/now 'area3: text'
Client client6 2011/06/16 root /appl/now 'area3: adds'
Client client7 2011/06/16 root /appl/now 'area1: info'

Что мне нужно сделать, это взять каждую строку из вышеприведенного вывода и сгруппировать их на основе записи area<#>. Каждая уникальная строка (info, adds и т. Д.) Является таблицей, и каждая запись, имеющая это значение, имеет еще один запуск cmd, и выходные данные сохраняются в таблице. Так что для вышеприведенного вывода у меня будет 4 таблицы; area1 будет иметь 2 записи, area2 будет иметь 1 запись, area3 будет иметь 3 записи, а area4 будет иметь 1 запись.

Эти значения хранятся в базе данных, поэтому я могу сделать оператор select, чтобы получить их, а затем сравнить их с моим исходным массивом или выполнить цикл по массиву и сохранить каждое уникальное значение в другом массиве. Первый вариант кажется быстрее, когда у меня очень большой набор данных, а второй вариант кажется быстрее, когда у меня маленький набор данных. Какой путь быстрее? Есть ли лучший способ, о котором я не думал?

Теперь, чтобы сравнить массив всех значений с массивом уникальных значений, чтобы сгруппировать их в отдельные таблицы, какой самый быстрый способ? Я в настоящее время перебираю, и если значение соответствует уникальному значению, я добавляю этот элемент в таблицу. Это делается с помощью вложенных циклов foreach, что не очень эффективно. Есть предложения?

1 Ответ

1 голос
/ 06 декабря 2011

Вы должны создать массив групп и выполнить итерацию, хотя ваш набор данных будет только один раз, в отличие от вашего проекта вложенного цикла. Это будет выглядеть примерно так:

<?php 
foreach($dataset as $row):
    $groups[$row['area_key']][] = $row;
endforeach; 
?>

Затем вы создадите свои таблицы из массива $groups.

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