У меня есть сотни статей в одном текстовом файле. Разделение между изделием
I use tags <-→ and <*****>
.
Пример:
<----->
sentence 1.1
sentence 1.2
<*****>
<----->
sentence 2.1
sentence 2.2
sentence 2.3
<*****>
<----->
sentence 3.1
sentence 3.2
<*****>
And now I want to remove articles that have odd number of sentences using PHP. Example:
<----->
sentence 1.1
sentence 1.2
<*****>
<----->
sentence 3.1
sentence 3.2
<*****>
Помогите мне, как удалить статьи с нечетным числом предложений с помощью PHP? Спасибо.
$string = '
<-----> <br>
sentence 1.1 <br>
sentence 1.2 <br>
<*****><br>
<-----><br>
sentence 2.1<br>
sentence 2.2<br>
sentence 2.3<br>
<*****><br>
<-----><br>
sentence 3.1<br>
sentence 3.2<br>
<*****><br>
';
$fullArticles = explode('<*****><br>', $string);
$output = '';
foreach ($fullArticles as $article) {
$sentences = explode(PHP_EOL, $article);
#remove empty lines, just in case
$sentences = array_filter($sentences);
#remove <----> separator, always first line of article
array_shift($sentences);
if (!empty($sentences) && count($sentences) % 2 == 0) {
$output .= '<-----><br>'
. PHP_EOL
. join(PHP_EOL, $sentences)
. PHP_EOL
. '<*****><br>'
. PHP_EOL;
}
}
echo $output;
Прочитайте всю строку ввода в массив статей, а затем разделите каждую статью на массив предложений. Теперь вы можете легко проверить, является ли количество предложений четным или нечетным. При нечетном (я также добавил условие для пустого), то не добавляйте его к выводу. Чтение и сохранение в файл зависит от вас. Вы также можете создать переменные для своих разделителей, чтобы не повторять себя.
Ну, это не хороший способ обработки множества данных, но в любом случае я бы предложил получить все строки в txt файле в организованный массив, чтобы было легче найти текущую строку, которую вы хотите удалить.
Я также рекомендовал бы добавить ID (uniqe) для каждой строки в txt файле, что также могло бы помочь вам обработать определенную строку.
http://php.net/manual/en/function.explode.php (я думаю, у вас уже есть txt файл в одну гигантскую строку, тогда эта функция может вам помочь)