strpos
문자열을 검색 할 때 바늘 배열에를 어떻게 사용 합니까? 예를 들면 :
$find_letters = array('a', 'c', 'd');
$string = 'abcdefg';
if(strpos($string, $find_letters) !== false)
{
echo 'All the letters are found in the string!';
}
이거 사용하면 안 되니까 이런게 있으면 좋을 텐데
답변
@Dave는 http://www.php.net/manual/en/function.strpos.php#107351 에서 업데이트 된 스 니펫을
function strposa($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
}
사용하는 방법:
$string = 'Whis string contains word "cheese" and "tea".';
$array = array('burger', 'melon', 'cheese', 'milk');
if (strposa($string, $array, 1)) {
echo 'true';
} else {
echo 'false';
}
true
때문에 반환됩니다 array
"cheese"
.
업데이트 : 첫 번째 바늘이 발견되면 중지로 코드를 개선했습니다.
function strposa($haystack, $needle, $offset=0) {
if(!is_array($needle)) $needle = array($needle);
foreach($needle as $query) {
if(strpos($haystack, $query, $offset) !== false) return true; // stop on first true result
}
return false;
}
$string = 'Whis string contains word "cheese" and "tea".';
$array = array('burger', 'melon', 'cheese', 'milk');
var_dump(strposa($string, $array)); // will return true, since "cheese" has been found
답변
str_replace는 상당히 빠릅니다.
$find_letters = array('a', 'c', 'd');
$string = 'abcdefg';
$match = (str_replace($find_letters, '', $string) != $string);
답변
아래 코드는이를 수행하는 방법을 보여줄뿐만 아니라 사용하기 쉬운 기능에 추가합니다. “jesda”에 의해 작성되었습니다. (온라인에서 찾았습니다)
PHP 코드 :
<?php
/* strpos that takes an array of values to match against a string
* note the stupid argument order (to match strpos)
*/
function strpos_arr($haystack, $needle) {
if(!is_array($needle)) $needle = array($needle);
foreach($needle as $what) {
if(($pos = strpos($haystack, $what))!==false) return $pos;
}
return false;
}
?>
용법:
$needle = array('something','nothing');
$haystack = "This is something";
echo strpos_arr($haystack, $needle); // Will echo True
$haystack = "This isn't anything";
echo strpos_arr($haystack, $needle); // Will echo False
답변
배열을 반복하고를 strpos
반환하는 경우 “플래그”값을 설정할 수 있습니다 false
.
$flag = false;
foreach ($find_letters as $letter)
{
if (strpos($string, $letter) === false)
{
$flag = true;
}
}
그런 다음의 값을 확인하십시오 $flag
.
답변
특정 문자가 실제로 문자열에 있는지 확인하려면 strtok 사용하십시오 .
$string = 'abcdefg';
if (strtok($string, 'acd') === $string) {
// not found
} else {
// found
}
답변
질문은 제공된 예제가 단지 “예”일 뿐입니 까 아니면 정확히 찾고있는 것입니까? 여기에는 여러 가지 혼합 된 답변이 있으며 허용되는 답변의 복잡성을 이해하지 못합니다.
여부를 확인하려면 모든 컨텐츠 바늘의 배열이 문자열에 존재하고 신속하게 참 또는 거짓을 반환합니다 :
$string = 'abcdefg';
if(str_replace(array('a', 'c', 'd'), '', $string) != $string){
echo 'at least one of the needles where found';
};
그렇다면 @Leon 에게 크레딧을 제공하십시오 .
여부를 확인하려면 ALL의 값 바늘의 배열이 존재하는 이 경우에서와 같이 문자열에, 세 가지를 모두 'a', 'b'
하고 'c'
당신이 언급처럼, 존재해야합니다 귀하의 “예”로
echo ‘문자열에서 모든 글자를 찾았습니다!’;
여기에 많은 답변이 그 맥락에서 벗어 났지만 해결 된 것으로 표시 한 질문의 의도가 의심됩니다. 예 : 허용되는 대답은 다음의 바늘입니다.
$array = array('burger', 'melon', 'cheese', 'milk');
모든 단어 가 문자열에서 반드시 발견되어야 한다면 ?
그런 다음 "not accepted answers"
이 페이지 에서 몇 가지를 시도해보십시오 .
답변
이 표현식은 모든 문자를 검색합니다.
count(array_filter(
array_map("strpos", array_fill(0, count($letters), $str), $letters),
"is_int")) == count($letters)