, 3 문자열은 다음과 같습니다특수 문자열에서 번호를 가져 오는 방법은 무엇입니까? PHP
@@7##
@@563##
@@120058##
을 나는이 같은 그 수를 얻을 수있는 방법 :
는 에코 첫 번째 숫자는 7
이 두 번째 숫자는 563
입니다 에코입니다 세 번째 숫자가 에코입니다. 120058
감사합니다. v 에리 많이!
, 3 문자열은 다음과 같습니다특수 문자열에서 번호를 가져 오는 방법은 무엇입니까? PHP
@@7##
@@563##
@@120058##
을 나는이 같은 그 수를 얻을 수있는 방법 :
는 에코 첫 번째 숫자는 7
이 두 번째 숫자는 563
입니다 에코입니다 세 번째 숫자가 에코입니다. 120058
감사합니다. v 에리 많이!
$numberAsString = trim($string, '@#')
이 경우 가장 쉽고 빠릅니다. 이 경우 출력은 여전히 문자열이지만 대부분의 경우에는 별 문제가되지 않습니다. 귀하의 경우에 맞는 경우 (int)
, (float)
등을 사용하여 올바른 유형으로 가져올 수 있습니다. 물론
, 정규식도 가능한 것, 예를 들면 :
$didMatch = preg_match('/@+([^#]+)#+/', $string, $matches);
또 다른 가능성은 여전히 먼저 초기 2 @
후 나머지 부분을 추출하고 항상에서 int로 보이는 숫자에 캐스팅 이 경우 :
$number = (int)substr($string, 2);
가 또 다른 가능성이있을 것이라고는 문자의 수에 의해 이동 한 것처럼 SUBSTR을 사용 :
$numberAsString = substr($string, 2, -2);
아니면 창조적 폭발 + 내파 + 배열 기능과 같이 사용할 수 있습니다 : 그것은 매우 비효율적이고 같은 물론
$numberAsString = array_slice(explode('#', implode('', array_slice(explode('@', $string), 2))), 0, -2);
이 마지막 하나는, 그것이 여러 가지 방법으로 수행 할 수 있다는 것을 보여주기 위해 순전히 실용적이지 않지만, 분명히 수십 가지 다른 방법이있다.
타이트한 루프 또는 성능이 중요한 부분에서 이것을 사용하는 경우, 다른 가능성을 벤치 마크 할 것입니다. 추측에 따르면 트림 또는 순수 하위 문자열 솔루션이 가장 빠를 것이라고 말하고 싶습니다.
$str = "@@563##";
preg_match("|\d+|", $str, $res);
print_r($res);
그냥 filter_var()
함수를 호출하면 숫자 만 반환됩니다.
입력 내용이 무엇이든 상관없이 입력 한 번호 만 필터링합니다!
filter_var("@@120058##", FILTER_SANITIZE_NUMBER_INT) // return 120058
filter_var("*##20kkk", FILTER_SANITIZE_NUMBER_INT) // return 20
문자열에 다른 문자가있는 경우 깨질 수 있습니다. –
예, 가능하지만 대답은 여전히 모든 예제에 맞습니다. Btw. preg_match 솔루션은 주어진 질문에서 알지 못하는 플로트를 추출하려는 경우 "끊어지기"때문에이 경우 실제로 사용 가능한 데이터로 귀결됩니다. – griffin