Intereting Posts
Не удалось создать COM-объект «X»: класс, не зарегистрированный в другой WAMP «Предупреждение: mysql_query (): предоставленный аргумент не является допустимым ресурсом MySQL-Link" Неустранимая ошибка при расширении включенного класса Проблема Weird SimpleXML – не может ссылаться на узлы по имени? PHP TCPDF ERROR: невозможно создать выходной файл, папка существует и имеет правильные разрешения Ошибка «Bad Gateway Error 502» при попытке загрузить серверный .zip-файл Как получить недельные дни в php? Перекрестный домен Единый избирательный вход Обратный массив в php Невозможно перечислить данные в приложении для Android от Mysql Как создать динамическую матрицу в php? Готовые заявления кэшируются на стороне сервера на нескольких загрузках страниц с помощью PHP? Узнайте номера страниц файлов PDF, Docx, Doc, Ppt, Pptx с PHP Как создать PDF из HTML с помощью классов начальной загрузки CSS Как установить jQuery с Composer?

preg_match_all в простой массив

У меня есть функция preg_match_all:

preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_SET_ORDER); 

Он работает так, как планировалось, но проблема в том, что он preg_matches все элементы дважды и в огромный многомерный массив, как это, например, где он, как и предполагалось, preg_matched все 11 элементов, но два раза и в многомерный массив:

 Array ( [0] => Array ( [0] => <h2>10. <em>Cruel</em> by St. Vincent</h2> [1] => 10. <em>Cruel</em> by St. Vincent ) [1] => Array ( [0] => <h2>9. <em>Robot Rock</em> by Daft Punk</h2> [1] => 9. <em>Robot Rock</em> by Daft Punk ) [2] => Array ( [0] => <h2>8. <em>Seven Nation Army</em> by the White Stripes</h2> [1] => 8. <em>Seven Nation Army</em> by the White Stripes ) [3] => Array ( [0] => <h2>7. <em>Do You Want To</em> by Franz Ferdinand</h2> [1] => 7. <em>Do You Want To</em> by Franz Ferdinand ) [4] => Array ( [0] => <h2>6. <em>Teenage Dream</em> by Katie Perry</h2> [1] => 6. <em>Teenage Dream</em> by Katie Perry ) [5] => Array ( [0] => <h2>5. <em>Crazy</em> by Gnarls Barkley</h2> [1] => 5. <em>Crazy</em> by Gnarls Barkley ) [6] => Array ( [0] => <h2>4. <em>Kids</em> by MGMT</h2> [1] => 4. <em>Kids</em> by MGMT ) [7] => Array ( [0] => <h2>3. <em>Bad Romance</em> by Lady Gaga</h2> [1] => 3. <em>Bad Romance</em> by Lady Gaga ) [8] => Array ( [0] => <h2>2. <em>Pumped Up Kicks</em> by Foster the People</h2> [1] => 2. <em>Pumped Up Kicks</em> by Foster the People ) [9] => Array ( [0] => <h2>1. <em>Paradise</em> by Coldplay</h2> [1] => 1. <em>Paradise</em> by Coldplay ) [10] => Array ( [0] => <h2>Song That Get Stuck In Your Head YouTube Playlist</h2> [1] => Song That Get Stuck In Your Head YouTube Playlist ) ) 

Как преобразовать этот массив в простой и без дублированных элементов? Большое спасибо.

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

 if (preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_PATTERN_ORDER)) $matches = $output[0]; // reduce the multi-dimensional array to the array of full matches only 

И если вы вообще не хотите подгружать, используйте не захватывающую группу:

 if (preg_match_all('#<h2>(?:.*?)</h2>#is', $source, $output, PREG_PATTERN_ORDER)) $matches = $output[0]; // reduce the multi-dimensional array to the array of full matches only 

Обратите внимание, что этот вызов preg_match_all использует PREG_PATTERN_ORDER вместо PREG_SET_ORDER:

PREG_PATTERN_ORDER Закаляет результаты, так что $ matches [0] – это массив совпадений полного шаблона, $ matches [1] – это массив строк, совпадающих с первым подшаблотелем в скобках и т. Д.

PREG_SET_ORDER Заказывает результаты, так что $ matches [0] – это массив первого набора совпадений, $ matches [1] – это массив второго набора совпадений и т. Д.

См .: http://php.net/manual/en/function.preg-match-all.php

использование

 #<h2>(?:.*?)</h2>#is 

как ваше регулярное выражение. Если вы используете группу без захвата (что означает ?: Означает), в массиве не будет отображаться обратная ссылка.