Я не вижу причин для чрезмерного усложнения этой задачи.
Повторяйте массив и добавляйте 1 к счетчику каждый раз, когда значение начинается со строки поиска.
Код: (Демо: https://3v4l.org/5Lq3Y)
function foo($ar_holding, $starts_with) {
$count = 0;
foreach ($ar_holding as $v) {
if (strpos($v, $starts_with)===0) {
++$count;
}
}
return $count;
}
$ar_holding = array('usa-ny-nyc','usa-fl-ftl', 'usa-nj-hb',
'usa-ny-wch', 'usa-ny-li');
echo foo($ar_holding, "usa-ny-"); // 3
Или, если вы не хотите объявлять какие-либо временные переменные:
function foo($ar_holding, $starts_with) {
return sizeof(
array_filter($ar_holding, function($v)use($starts_with){
return strpos($v, $starts_with)===0;
})
);
}