Если вас не интересует распределение символов, вы можете использовать регулярное выражение
echo preg_match_all("/[$needle]/", $haystack, $matches);
, которое возвращает количество полных совпадений с образцом (которое может быть нулевым), или FALSE
, если произошла ошибка,Решение , предлагаемое @ thai выше, должно быть значительно быстрее.
Если распределение символов имеет какое-либо значение, вы можете использовать count_chars
:
$needle = 'AGUXYZ';
$haystack = 'Agriculture ID XYZ-A';
$occurences = array_intersect_key(
count_chars($haystack, 1),
array_flip(
array_map('ord', str_split($needle))
)
);
Результатом будет массив с ключами, являющимися значениями ASCII символа.
Затем вы можете перебрать его с помощью
foreach($occurences as $char => $amount) {
printf("There is %d occurences of %s\n", $amount, chr($char));
}
Вы все равно можете передать *От 1020 * массив до array_sum
для расчета суммы.