указали вы передаете неправильные параметры друга. Но вы также изобретаете колесо. Взгляните на php's regular expression match-all (whoops, связали неправильную функцию), он будет возвращать массив всех совпадений с смещениями, когда используется со следующим флагом.
флаги
флаги могут быть следующие флаг:
PREG_OFFSET_CAPTURE
Если этот флаг будет принят, для каждой найденной довесок строки смещение также будет возвращено д. Обратите внимание, что это изменяет значение совпадений в массив, где каждый элемент представляет собой массив, состоящий из согласованной строки со смещением 0 и смещением строки к субъекту при смещении 1.
Используйте шаблон с одной буквой для поискового запроса $letter = '/e/'
, и вы должны вернуть массив со всеми вашими позициями в качестве второго элемента каждого массива результатов, который затем вы можете оформить в формат вывода, который вы ищете.
Обновление: Джаред указывает, что вы получаете захват рисунка назад, но с установленным флагом вы также получаете смещение. В качестве прямого ответа на вопрос OP, попробуйте этот код:
$word = "aeagle";
$pattern = "/e/";
$matches = array();
preg_match_all($pattern, $word, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
Он имеет следующий поток вывода:
Array
(
// Matches of the first pattern: /e/
[0] => Array
(
// First match
[0] => Array
(
// Substring of $word that matched
[0] => e
// Offset into $word where previous substring starts
[1] => 1
)
[1] => Array
(
[0] => e
[1] => 5
)
)
)
Результаты являются 3D вместо 2D, поскольку preg_match_all может соответствовать несколько шаблонов сразу. Хиты для первого (и в данном случае: только) шаблона поставляются и, таким образом, находятся в первом массиве.
А в отличие от OP первоначально заявлено, 1 и 5 являются правильными индексирует письма e
в строке 'aeagle'
aeagle
^^
1 5
Производительность мудрый, адаптированная версия strposall, вероятно, будет быстрее, чем совпадения с регулярным выражением , Но научиться использовать встроенную функцию почти всегда быстрее, чем разработка, тестирование, поддержка и поддержка вашего собственного кода.И 9 раз из 10, это самая дорогая часть программирования.
Там нет 'переменная $ aegle' определенный i n ваш код. Там '$ word' ... –
Вы должны рассмотреть возможность поиска в журналах ошибок. Или включите предупреждения, по крайней мере, – Ranty
Убедитесь, что у вас есть предупреждения в PHP, поэтому вы можете видеть, что используете неопределенную переменную. – halfer