无法找到字符串中第一次出现的位置
我需要在不重复的字符串中找到第一个字符出现的位置。 到目前为止,我所有的$pos
输出都是0
。
<?php
$sentence = "some long string";
$found = false;
while(!$found && $sentence!== ""){
$c = $sentence[0];
$count = substr_count($sentence,$c);
if ($count == 1) $found = true;
else $sentence = str_replace($c,"",$sentence);
}
$pos = strpos($sentence, $c);
echo "$c: $pos";
它将输出l:0
。 那是怎么回事?
我知道$pos = strpos($sentence, $c);
将不会是找到位置的正确方法。 为什么我感到困惑的是,当我回声$ c时,它的值是“l”。 所以,我想如果我用它的价值,它会给我正确的立场。 所以为了得到如何提取这个第一个不重复的字符位置的帮助,我想我会在StackOverlow中请求我指向正确的方向。 没必要成为d ** ks,我只是在学习,我很欣赏帮助。
你的代码几乎是正确的。 当我测试它时,我得到'm:0',这确实是第一个只出现一次的人物。 位置为0的原因是每次尝试新角色时都缩小原始字符串。
我建议您在开始查找字符之前复制字符串,然后使用副本计算结尾处的位置,而不是缩小的字符串。
<?php
$sentence = "some long string";
$sentence_copy = $sentence;
$found = false;
while(!$found && $sentence!== ""){
$c = $sentence[0];
$count = substr_count($sentence,$c);
if ($count == 1) $found = true;
else $sentence = str_replace($c,"",$sentence);
}
$pos = strpos($sentence_copy, $c);
echo "$c: $pos";
这给了我'm:2',这是正确的。
关于评论
我需要找到不重复的第一个字符的位置。
<?php
$numberOfOccurences = array_count_values(str_split($string, 1));
$uniqueCharacters = array_keys(
array_filter($numberOfOccurences, function($c) { return $c == 1; })
);
echo $uniqueCharacters[0] . ':' . strpos($string, $uniqueCharacters[0]);
这个想法很简单,我们将字符串视为一个字符串,但是作为一组字符来计算每个字符,然后只保留一次出现的字符( array_filter()
$c == 1
)和(假设,功能稳定[1])采取第一个。
[1]“稳定”是指他们保持秩序。 如果不是,则必须迭代$uniqueCharacters
并找到一个,手动出现。
$positions = array_map(
$uniqueCharacters,
functions ($character) use ($string) { return strpos($string, $character); }
);
$pos = min($positions);
echo "{$string[$pos]}:$pos";
http://php.net/manual/en/function.strpos.php
返回相对于干草堆串起始位置的针位置(与偏移量无关)。 另请注意,字符串位置从0开始,而不是1。
如果未找到针,则返回FALSE。
其次, $c = $sentence[0]
和strpos($sentence, $c)
不会让你知道你已经知道的更多信息。
上一篇: Unable to find position of the first occurrence in a string