Php посчитать количество строк в файле
PHP « количество строк в файле
Делаю обработку больших файлов и хочу сделать индикатор процесса, а для этого мне нужно знать конечную величину (
Перечитывать, хоть и впустую, файл считаю лишней задачей.
1 ответов
Мне известно только 2 метода:
1. Явно с помощью PHP:
2. Но можно не явно, используя возможности ОС сервера (иссесна не Windows):
Второй метод платформозависимый.
А чем Вас не устраивает размер файла в байтах? Какая разница, что на что делить: количество обработанных байтов на их общее количество или количество обработанных строк на их общее количество?
Получаете размер файла. Например, 700 байт. Далее в обработчике Вашем, который обрабатывает строки получаете длину строки, далее получаете количество байт в строке и вычисляете процент проделанной работы.
Пример:
Файл 700 байт.
Получаем первую строку 22 байта.
Вычисляем сколько процентов выполнено (22/700)*100=
3% (вроде так проценты считаются)
Получаем вторую строку 200 байт.
Вычисляем сколько выполнено (200/700)*100=
29% Или (222/700)*100=более точное число.
Смысл понятен? Это говорил автор выше, но его мысль была не развёрнута.
А вот такое не в коем случае не используйте. Файл помимо того, что полностью прочитается, так он ещё и в оперативке будет занимать размер больше чем сам файл весит.
Нельзя. Невозможно найти количество вхождений некоего элемента в неотсортированной последовательности кроме как полным сканированием (как точно подметил ErgallM с кубиками)
Символ перевода строки для ПК такой же символ как «Б» или «S».
Чтобы посчитать количество этих символов необходимо прочитать весь файл.
Подсчитать количество строк в таблице?
а запрос кто вызывать будет?
Совершенно непонятно зачем посылать человека изучать PDO. Разработчики PHP, если мне память не изменяет, советуют использовать MySqli а не PDO для работы с MySql.
А вообще, автор, вам нужно просто понять как работать с базой из PHP. Почитайте, например, тут: https://htmlacademy.ru/tutorial/php/mysql
непонятно зачем посылать человека изучать PDO
затем, что он универсальнее и гораздо удобнее.
mysqli имеет пару возможностей, недоступных pdo. но они нужны в крайне специфических ситуациях, и точно не нужны человеку, неспособному обработать элементарный запрос
mysqli имеет пару возможностей, недоступных pdo. но они нужны в крайне специфических ситуациях, и точно не нужны человеку, неспособному обработать элементарный запрос
Полностью с вами согласен.
Никто не спорит, это так. Но мы тут говорили в контексте MySQL.
В любом случае, вы же понимаете, что это холивар, участвовать в котором нам с вами не имеет смысла 🙂
Newto, шта? вы вообще имеете понятие о чем пишите?
запросы что в одном, что в другом абсолютно одинаковы.
Вы видите разницу? Мне, как и вам, одинаково все-равно как написать. Но вот старая мускуль в пхп работала именно по второму варианту. Дальше.
Newto, ты очень смешной клоун 🙂
Сейчас тебе придется снова придется отвечать в стиле «я видел, но не видел».
Идешь в свой любимый легаси код и смотришь, есть ли там хоть что-то напоминающее «$connect = new mysqli».
потом приходишь сюда, и снова рассказываешь что «если я привожу хоть какой-то факт, то он всегда оказывается неверным, но зато я умею строчить кучу ничего не значащих слов в подтверждение своих диких фантазий и от этого в своих глазах выгляжу ну оооочень умным» 🙂
count
(PHP 4, PHP 5, PHP 7, PHP 8)
count — Подсчитывает количество элементов массива или чего-либо в объекте
Описание
Подсчитывает количество элементов массива или чего-то в объекте.
Смотрите раздел Массивы в этом руководстве для более детального представления о реализации и использовании массивов в PHP.
Список параметров
Если необязательный параметр mode установлен в COUNT_RECURSIVE (или 1), count() будет рекурсивно подсчитывать количество элементов массива. Это особенно полезно для подсчёта всех элементов многомерных массивов.
count() умеет определять рекурсию для избежания бесконечного цикла, но при каждом обнаружении выводит ошибку уровня E_WARNING (в случае, если массив содержит себя более одного раза) и возвращает большее количество, чем могло бы ожидаться.
Возвращаемые значения
Список изменений
Примеры
Пример #1 Пример использования count()
Результат выполнения данного примера:
var_dump ( count ( null ));
var_dump ( count ( false ));
?>
Результат выполнения данного примера:
Результат выполнения данного примера в PHP 7.2:
Результат выполнения данного примера в PHP 8:
Пример #3 Пример рекурсивного использования count()
Смотрите также
User Contributed Notes 17 notes
[Editor’s note: array at from dot pl had pointed out that count() is a cheap operation; however, there’s still the function call overhead.]
If you are on PHP 7.2+, you need to be aware of «Changelog» and use something like this:
My function returns the number of elements in array for multidimensional arrays subject to depth of array. (Almost COUNT_RECURSIVE, but you can point on which depth you want to plunge).
I actually find the following function more useful when it comes to multidimension arrays when you do not want all levels of the array tree.
$arr [ ‘__been_here’ ] = true ;
to end the debate: count() is the same as empty()
results on my computer:
count : double(0.81396999359131)
empty : double(0.81621310710907)
using isset($test[0]) is a bit slower than empty;
test without adding value to the array in function ****Test: still the same.
A function of one line to find the number of elements that are not arrays, recursively :
Get maxWidth and maxHeight of a two dimensional array.
Note:
1st dimension = Y (height)
2nd dimension = X (width)
e.g. rows and cols in database result arrays
You can not get collect sub array count when there is only one sub array in an array:
$a = array ( array (‘a’,’b’,’c’,’d’));
$b = array ( array (‘a’,’b’,’c’,’d’), array (‘e’,’f’,’g’,’h’));
echo count($a); // 4 NOT 1, expect 1
echo count($b); // 2, expected
For a Non Countable Objects
Warning: count(): Parameter must be an array or an object that implements Countable in example.php on line 159
#Quick fix is to just cast the non-countable object as an array..
As I see in many codes, don’t use count to iterate through array.
Onlyranga says you could declare a variable to store it before the for loop.
I agree with his/her approach, using count in the test should be used ONLY if you have to count the size of the array for each loop.
You can not get collect sub array count when use the key on only one sub array in an array:
$a = array(«a»=>»appple», b»=>array(‘a’=>array(1,2,3),’b’=>array(1,2,3)));
$b = array(«a»=>»appple», «b»=>array(array(‘a’=>array(1,2,3),’b’=>array(1,2,3)), array(1,2,3),’b’=>array(1,2,3)), array(‘a’=>array(1,2,3),’b’=>array(1,2,3))));
echo count($a[‘b’]); // 2 NOT 1, expect 1
echo count($b[‘b’]); // 3, expected
To get the count of the inner array you can do something like:
$inner_count = count($array[0]);
echo ($inner_count);
About 2d arrays, you have many way to count elements :
Criada para contar quantos níveis um array multidimensional possui.
/* Verifica se o ARRAY foi instanciado */
if (is_setVar($matrix))<
/* Verifica se a variável é um ARRAY */
if(is_array($matrix))<
In special situations you might only want to count the first level of the array to figure out how many entries you have, when they have N more key-value-pairs.
If you want to know the sub-array containing the MAX NUMBER of values in a 3 dimensions array, here is a try (maybe not the nicest way, but it works):
$cat_poids_max[‘M’][‘Seniors’][] = 55;
$cat_poids_max[‘M’][‘Seniors’][] = 60;
$cat_poids_max[‘M’][‘Seniors’][] = 67;
$cat_poids_max[‘M’][‘Seniors’][] = 75;
$cat_poids_max[‘M’][‘Seniors’][] = 84;
$cat_poids_max[‘M’][‘Seniors’][] = 90;
$cat_poids_max[‘M’][‘Seniors’][] = 100;
//.
$cat_poids_max[‘F’][‘Juniors’][] = 52;
$cat_poids_max[‘F’][‘Juniors’][] = 65;
$cat_poids_max[‘F’][‘Juniors’][] = 74;
$cat_poids_max[‘F’][‘Juniors’][] = 100;
как подсчитать количество строк в запросе средствами php
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Подсчитать количество строк и ввести данные в другие ячейки желательно средствами VBA
Есть файл в котором приходят записи оражевого цвета. Каждый раз файл приходит с разным количеством.
Как подсчитать количество записей в запросе.
В отчете могу, а в запросе нет. Чтобы в поле «KolZap» запроса, появилось количество записей в нем.
Как средствами VBA подсчитать количество листов которое будет печататься?
Как средствами VBA подсчитать количество листов которое будет печататься? т.е. на экране.
А где код выбора из бд? Какими функциями вы пользуетесь? Как сказать как подсчитать если не известно что имеется
Если это вам лишь для подсчёта, то это очень не оптимальный способ. А если пользователей будет 1000? А если 10000? А если больше? В конце концов это положит сервер в зависимости от характеристик и конфигурации.
Для подсчёта в mysql есть специальные функции, почему бы не считать ими?
Вот именно. Вам кажется.
Да, но.
Если один запрос выберет 100 000 строк.
Или сделать 10 запросов, которые выберут по 1 строке.
То лучше сделать 10 запросов.
Но я вам в третий раз напишу. У вас не будет 10 запросов! А только 1.
Php количество строк в файле
Возможно, Вы уже столкнулись с задачей подсчёта общего количества строк в файле. Неважно, нужно подсчитать количество служебных записей в файле, узнать количество строк htaccess или записей txt-файла, хранящего в себе какие-либо данные. Указанные ниже способы решения подойдут для каждого случая.
Создадим функцию для подсчёта количество строк в файле PHP
Создаваемая функция будет использовать две встроенные:
1. file() в качестве аргумента принимает файл или путь к нему, а возвращает массив строк
2. count() подсчитывает количество элементов массива.
Теперь переходим к созданию файла с самой функцией. В корневой директории (вы можете на своё усмотрение выбрать другую) создаём отдельную папку include. В ней создадим файл будущей функции и назовём его functions.php. Далее вставляем в него указанный ниже код.
Код PHP (файл functions.php)
Итак, файл с функцией готов. В корневой директории (папке) можем уже создать рабочий файл с любым названием (в примере его назвал example.php), а в нём данную функцию будем подключать следующим образом.
Код PHP (файл example.php)
В результате отобразит примерно следующий текст
Строк в файле: 52
Можно рассмотреть пример короче без создания функции. В нём уже не будет никакой проверки на наличие файла
Код PHP (вставляете в любой файл php)
Вот есть у меня переменная которую я вывожу в textarea, вот как посчитать кол-во строк?
3 ответа 3
Медленный способ. Затратный по ресурсам и не всегда выдает правильный результат
Более быстрый вариант:
Вопрос в том, что делать в случае »
123
456
» — это две строки или 3 или 4? Код выше скажет 4, но логика подсказывает, что скорее всего три (а первая строка пустая). Но можно вычитать 1, если первый символ
. Тоже можно сделать и с последним символом.
Sir_J
Guest
Количество строк в файле
arial
Guest
Sir_J
Guest
Profic
just Profic (PHP5 BetaTeam)
1) Для того, чтобы узнать кол-во строк файл нужно прочитать
самое изящное решение (ИМХО)
$linesno = sizeof (file (‘filename’));
оно, возможно и самое быстрое, т.к.
1) file в считывании файлов построчно довольно быстрый (http://php.spb.ru/php/speed.html#file)
2) sizeof тоже быстра (см там же)
Sir_J
Guest
Ваня-Ваня
Guest
Спасибо говорить не за что — профик глупость сказал.
имхо имхом, но думать тоже надо?
самое быстрое — это, я думаю, через систем запустить какую-нибудь утилиту, grep какой-нибудь
Если же средствами пхп, то считать файл целиком и substr_count
Sir_J
Guest
Ваня-Ваня
Guest
о, господи.
ты и тестировать не умеешь.
сделай файл размером хотя бы в мегабайт.
и убедитсь.
и запомни на всю жизнь, что если выбирать между работой с массивами и без массивов, то надо выбирать второе.
Эта статья вообще имеет очень мало общего с реальностью, а
По поводу именно этого раздела форуме уже десяток тем было.
Сир, не уподобляйся глупцам.
Ваня-Ваня
Guest
Ваня-Ваня
Guest
одно только дополнение.
если ты считаешь, что способы, которые перечислены в статье — это все, какими можно считать файл в переменную, то ты ошибаешься.
[m]fread[/m]
[m]substr_count[/m]
о результатах доложить
Sir_J
Guest
Sir_J
Guest
Ваня-Ваня
Guest
Ваня-Ваня
Guest
Sir_J, ну, извиняюсь.
безапелляционность — от твоей бездоказательности.
ни параметров теста, ни тестовых кодов, ни результатов ты тут не привел.
осталось только догадываться.
тем более, что самый быстрый из кроссплатформенных вариантов ты так и не привел.
Sir_J
Guest
Ваня-Ваня
Guest
к твоему сведению, я пробовал, и не раз.
и приводил здесь, на форуме все, о чем написал.
а вот ты так и не написал ничего
и тебе нельзя сказать, где ты ошибся — вот приходится догадываться.
что я и делаю.
мало ли — ты греп неправильно применяешь?
или я так до сих пор и не получил ответа — делал ли ты так, как я тебе сказал.
это тем более интересно, если греп по твоим словам, на каком- то этапе проигрывает самому тормозному — файлу.
хотя файл на 1000 строк, т. е, килобайт 10-20, — это настолько мизерный объем, что тут уже вступают в силу погрешности.