Имеется 20 баз на CSV.
Количество строк в каждой, я могу вывести так:
А вот как найти сумму строк во всех базах?
Как найти найти минимум и максимум строк в базах?
К примеру:
Всего ХХХ строк во всех базах.
Больше всего строк в базе "5" (Х)
Меньше всего строкй в базе "9" (X)
Если не сложно, с комментариями по коду =))
Спустя 21 минута, 5 секунд (5.07.2009 - 02:52) kirik написал(а):
Держи. Не проверял, но должно работать
PHP |
// опеределяем массив с данными $stats = array( 'total' => 0, 'maximum' => array('db' => null, 'lines' => 0), 'minimum' => array('db' => null, 'lines' => 0), );
// запускаем цикл for($i = 1; $i <= 20; $i++) { $file = './base/'.$i.'.csv'; // определяем путь до файла БД $data = file($file); // достаем все строки из файла $lines = count($data); // считаем количество строк unset($data); // очищаем переменную
$stats['total'] += $lines; // суммируем общее кол-во строк
// если БД с максимальным кол-вом строк еще не задана, или это значение меньше текущего - перезаписываем if($stats['maximum']['db'] === null || $lines > $stats['maximum']['lines']) { $stats['maximum']['db'] = $file; $stats['maximum']['lines'] = $lines; }
// если БД с минимальным кол-вом строк еще не задана, или это значение больше текущего - перезаписываем if($stats['minimum']['db'] === null || $lines < $stats['minimum']['lines']) { $stats['minimum']['db'] = $file; $stats['minimum']['lines'] = $lines; }
echo 'В файле "'.$file.'": '.$lines.' строк<br />'; }
// выводим данные о количествах echo 'Всего строк: '.$stats['total'].';<br /> Максимум строк: '.$stats['maximum']['lines'].' (в базе '.$stats['maximum']['db'].');<br /> Минимум строк: '.$stats['minimum']['lines'].' (в базе '.$stats['minimum']['db'].');'; |
Спустя 1 час, 40 минут, 4 секунды (5.07.2009 - 04:32) linf написал(а):
kirik, ну и скорость у вас... профессионалы =))
не прошло и пол часа...
ща буду пробовать... честно код кажется сложноватым, думал будет намного проще...
Спустя 23 минуты, 53 секунды (5.07.2009 - 04:56) kirik написал(а):
Цитата (linf @ 4.07.2009 - 20:32) |
естно код кажется сложноватым, думал будет намного проще... |
Можно подумать и сделать размером поменьше, но он будет еще сложнее
Спустя 7 часов, 57 минут, 18 секунд (5.07.2009 - 12:53) linf написал(а):
Так как я новичок, хочу понят некоторые моменты:
1. Почему некоторые переменные окружены точками?
2. Для чего создается массив?
3. Если не нужно указывать сколько в какой базе конкретно, и убрать это (echo 'В файле "'.$file.'": '.$lines.' строк<br />';), то что можно еще убрать из кода?
4. Как ввести названия баз, что бы вместо:
Максимум строк: 7 (в базе ./base/20.csv);
Минимум строк: 0 (в базе ./base/3.csv);
было к примеру:
Максимум строк: 7 в базе "название базы 20"
Минимум строк: 0 в базе "Название базы 3";
Спустя 4 часа, 30 минут, 34 секунды (5.07.2009 - 17:23) kirik написал(а):
Цитата (linf @ 5.07.2009 - 04:53) |
1. Почему некоторые переменные окружены точками? |
Это символы
конкотенации (объединение строк).
Цитата (linf @ 5.07.2009 - 04:53) |
2. Для чего создается массив? |
Для того, чтобы хранить в нем данные
Цитата (linf @ 5.07.2009 - 04:53) |
3. Если не нужно указывать сколько в какой базе конкретно, и убрать это (echo 'В файле "'.$file.'": '.$lines.' строк<br />';), то что можно еще убрать из кода? |
Хороший вопрос. Смотря что тебе от кода нужно.. Можно вообще все убрать
Цитата (linf @ 5.07.2009 - 04:53) |
4. Как ввести названия баз, что бы вместо: |
Подумай-ка
Спустя 22 часа, 23 минуты, 1 секунда (6.07.2009 - 15:46) Alchemist написал(а):
Если сервер на *nix системе, то можно и короче
PHP |
$text = `wc -l base/*.csv`; // считаем строки preg_match_all('/([\d]+) ([\S]+)/',$text,$matches); // парсим данные $result = array_combine($matches[2],$matches[1]); // форматируем их удобства для
$total = array_pop($result); // убираем общее кол-во $edges = array(max($result),min($result)); // находим максимум и минимум
echo "Total: ".$total."<br />\n"; echo "max ".$edges[0]." in ".array_search($edges[0],$result)."<br />\n"; echo "min ".$edges[1]." in ".array_search($edges[1],$result)."<br />\n"; |
Спустя 20 минут, 32 секунды (6.07.2009 - 16:07) glock18 написал(а):
только стало ли понятней...
Спустя 2 минуты, 55 секунд (6.07.2009 - 16:10) Alchemist написал(а):
тогда вот еще вариант
PHP |
preg_match_all('/([\d]+) ([\S]+)/',`wc -l base/*.csv`,$matches); asort($matches[1]);
echo "Total: ".array_pop($matches[1])."<br />\n"; echo "max ".current($matches[1])." in ".$matches[2][key($matches[1])]."<br />\n"; echo "min ".end($matches[1])." in ".$matches[2][key($matches[1])]."<br />\n"; |
Спустя 7 дней, 12 часов, 12 минут, 27 секунд (14.07.2009 - 04:22) linf написал(а):
Супер... у меня то linux... но будет ли работать на хостинге который я еще не выбрал это вопрос!
То что вы все разбираетесь и предлагаете решение одно короче другого это радует... понимать пытаюсь.
И все же, как ввести вместо названий файлов относительные их названия...?
Спустя 13 минут, 16 секунд (14.07.2009 - 04:36) kirik написал(а):
Цитата (linf @ 13.07.2009 - 20:22) |
И все же, как ввести вместо названий файлов относительные их названия...? |
непонЯл...
Спустя 6 часов, 52 минуты, 8 секунд (14.07.2009 - 11:28) Alchemist написал(а):
Цитата |
А в 2 строки можешь? |
Гы, как два пальца абасвальт
PHP |
preg_match_all('/([\d]+) ([\S]+)/',`wc -l base/*.csv | sort -bn`,$matches);
echo "Total: ".array_pop($matches[1])."<br />\n max ".$matches[1][0]." in ".$matches[2][0]."<br />\n min ".end($matches[1])." in ".end($matches[2])."<br />\n"; |
Спустя 9 часов, 9 минут, 57 секунд (14.07.2009 - 20:38) kirik написал(а):
Цитата (Alchemist @ 14.07.2009 - 03:28) |
Гы, как два пальца абасвальт |
Ну ты... совести у тебя нет
Спустя 1 час, 36 минут, 14 секунд (14.07.2009 - 22:14) linf написал(а):
Цитата (Alchemist @ 14.07.2009 - 12:28) |
Цитата | А в 2 строки можешь? |
Гы, как два пальца абасвальт PHP | preg_match_all('/([\d]+) ([\S]+)/',`wc -l base/*.csv | sort -bn`,$matches);
echo "Total: ".array_pop($matches[1])."<br />\n max ".$matches[1][0]." in ".$matches[2][0]."<br />\n min ".end($matches[1])." in ".end($matches[2])."<br />\n"; |
|
А если базам нужно присвоить названия!
что бы потом выводить их:
максимум в "название 5 базы"
минимум в "название 3 базы"
Спустя 2 часа, 48 минут, 56 секунд (15.07.2009 - 01:03) Alchemist написал(а):
linf, ты писал это уже 3 раза, но еще ни разу не написал где взять эти названия.
Спустя 2 дня, 19 часов, 49 минут, 8 секунд (17.07.2009 - 20:52) linf написал(а):
Alchemist Нзваний в самих базах нет, но допустим я знаю, что
1.csv называется к примеру "Москва",
2.csv называется "Питер"
3.csv называется "Воронеж"
итд...
Я так понимаю нужно ввести еще один массив в прировнять, да?
Как это можно сделать?
Спустя 2 часа, 17 минут, 21 секунда (17.07.2009 - 23:09) Alchemist написал(а):
Спустя 2 часа, 21 минута, 10 секунд (18.07.2009 - 01:30) kirik написал(а):
Цитата (Alchemist @ 17.07.2009 - 15:09) |
kirik тебе в помощь... |
Цитата (linf @ 17.07.2009 - 12:52) |
Я так понимаю нужно ввести еще один массив в прировнять, да? |
Угу..
PHP |
// Объявляем ассоциативный массив id_базы => 'название' $db_assoc = array( 1 => 'Москва', 2 => 'Петербург', 3 => 'Воронеж' ); // ------------- // в скрипте меняем это $file = './base/'.$i.'.csv'; // на это $file = './base/'.$i.'.csv'; $db_name = isset($db_assoc[$i]) ? $db_assoc[$i] : 'Название базы не определено в массиве'; // ------------- // это $stats['maximum']['db'] = $file; // на это $stats['maximum']['db'] = $db_name; // ------------- // и это $stats['minimum']['db'] = $file; // на это $stats['minimum']['db'] = $db_name; |
Спустя 5 дней, 47 минут, 27 секунд (23.07.2009 - 02:18) linf написал(а):
kirik спасибо огромное, все работает как надо, к тому же научился правильно массивы составлять...
_____________
Live in new format =)