Я пытаюсь заменить телефонные номера на [скрытые] и показать их снова при нажатии. Это прекрасно работает, когда есть только один номер. Но когда их больше, он их скрывает, но проблема в том, что они возвращают одинаковое число для обоих скрытых полей.
$check ='111 111 1111 / 222 222 2222';
preg_match('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', $check, $phone_matches);
echo sizeOf($phone_matches); //returns 1, why not 2??
В значительной степени, если вы можете помочь мне получить sizeOf($phone_matches)
чтобы показать правильную сумму, мне должно быть хорошо оттуда!
РЕДАКТИРОВАТЬ:
for($i=0; $i<sizeOf($phone_matches[0]); $i++){
$check = preg_replace('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', '<span class="hide">'.$phone_matches[0][$i].'</span><span class="show">show phone</span>', $check);
}
echo $check;
Вы хотите использовать preg_match_all
не preg_match
preg_match_all('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', $check, $phone_matches);
print_r($phone_matches);
Но учтите, что sizeof($phone_matches)
будет по-прежнему 1, так как массив совпадений на самом деле $phone_matches[0]
,
Чтобы перебрать все совпадения, которые вы делаете:
foreach ($phone_matches[0] as $match) {
//Do something with $match
}
Но для чего ты на самом деле пытаясь достичь, нет необходимости preg_match_all
совсем. Простая однострочная preg_replace
сделает свое дело:
$check = preg_replace('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', '<span class="hide">$0</span><span class="show">show phone</span>', $check);
Других решений пока нет …