Как подсчитать числовые ключи в массиве с одинаковыми именами - PullRequest
0 голосов
/ 08 мая 2020

Для системы блогов с плоскими файлами у меня есть txt файлов в каталоге data/articles. Файл txt выглядит так:

id_20200430223049                    // id
Friends                              // category
uploads/mainimage_5eab357970b0d.jpeg // image
Officials wanted                     // title
comment<br />comment<br />comment    // comment

Как я могу подсчитать количество категорий для каждой категории для всех файлов txt?

Итак, скажем: у меня есть 6 текстовых файлов. Во 2-й строке каждого файла:

2 из них имеют категорию Клуб

2 из них имеют категорию Коллеги

1 имеет категорию Семья

и 1 имеет категорию Друзья

То, что у меня есть на данный момент:

$files = glob("data/articles/*.txt"); // Specify the file directory by extension (.txt)
$cat_lines = array();
foreach($files as $file) {

        $lines = file($file); // all lines of file in array
        $cat_lines[] = strtolower($lines[1]); // grab the category lines and put in array

}

print_r($cat_lines); дает мне следующий результат:

Array ( [0] => friends [1] => family [2] => club [3] => colleagues [4] => club [5] => colleagues )

Чтобы подсчитать количество ключей в массиве, который я использую:

echo count (array_keys( $cat_lines, strtolower("Club") ) );

К сожалению, он дает мне 0 как вывод вместо 2 !!! Я не понимаю этого ...

Но, помимо этого, я наконец хочу достичь: как я могу создать foreach l oop, который дает мне такой вывод:

Friends (1)
Family (1)
Club (2)
Colleagues (2)

1 Ответ

2 голосов
/ 08 мая 2020

Вероятно, ваши предметы в $lines имеют символы перевода строки. Это означает, что club не то же самое, что club\n.

Используйте FILE_IGNORE_NEW_LINES, когда вы явно используете file() или значение обрезки:

$lines = file($file, FILE_IGNORE_NEW_LINES); // all lines of file in array WITHOUT linebreaks

Что касается вашего второго вопроса - array_count_values даст вам новый массив со счетчиками каждого элемента в нем:

$counts = array_count_values($cat_lines);
...