无法找到字符串中第一次出现的位置

我需要在不重复的字符串中找到第一个字符出现的位置。 到目前为止,我所有的$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)不会让你知道你已经知道的更多信息。

链接地址: http://www.djcxy.com/p/75359.html

上一篇: Unable to find position of the first occurrence in a string

下一篇: NOW() function in PHP