2014-04-30 2 views
0

Я предполагаю, что о точной работе этой функции в PHP: preg_match_allpreg_match_all объяснение

$var = "Example"; 
$n = preg_match_all('/[AEIOU]/i', strtoupper($var), $matches); 

echo "$n<p>"; // Output: 3 
echo $matches[0][1]; // Output: A 

Это почти совершенно ясно мне: Найти все матчи гласные в переменной $var и поместить их количество в $n , в то время как найденные совпадения идут в переменной $matches. Но почему $matches является двумерным массивом, если первый индекс должен быть 0? Разве это не должно быть что-то вроде $matches[1]? (но он не работает)

Как я могу использовать следующие индексы?

+3

«Массив всех совпадений в многомерном массиве, упорядоченный по флагам». - из документов. Читайте о флажках. http://us1.php.net/manual/en/function.preg-match-all.php – Jessica

+2

«Потому что он был спроектирован таким образом, чтобы рассчитывать на ответ?) '$ matches [1..n]' очень полезно, когда вам приходится использовать группы захвата. – raina77ow

+0

Обратите внимание, что модификатор i здесь бесполезен –

ответ

1

«Первый индекс должен быть 0», потому что это индекс «всех совпадений». Индекс 1 был бы первым подшаблоном, если бы у вас его было. Индекс 2 - второй подшаблон и т. Д.

Это поведение можно отрегулировать с помощью констант PREG_*_ORDER, см. docs.

+0

Я не знал эту штуку, но после изучения документации, с которой вы связаны, я, похоже, больше разбираюсь. Поскольку я не использую подшаблоны, я уверен, что могу разрешить с помощью '$ matches = $ matches [0];' (Без потери данных) – user1714647

+0

Абсолютно верно. –

Смежные вопросы