Bir dize içinde bir karakterin ikinci-to-son örneğini nasıl bulabilirim?

6 Cevap php

Mümkünse,) (substr gibi yalnızca standart PHP fonksiyonları kullanılarak, strrpos (), strpos (), vb

6 Cevap

Birincisi, son konumunu bulmak:

$last = strrpos($haystack, $needle);
if ($last === false) {
  return false;
}

Oradan, 2. son bulmak:

$next_to_last = strrpos($haystack, $needle, $last - strlen($haystack) - 1);

Geriye adımların herhangi bir sayı için genel çözüm:

function strrpos_count($haystack, $needle, $count)
{
    if($count <= 0)
        return false;

    $len = strlen($haystack);
    $pos = $len;

    for($i = 0; $i < $count && $pos; $i++)
        $pos = strrpos($haystack, $needle, $pos - $len - 1);

    return $pos;
}

Ile strpos,

$pos = -1; $last = null; $secondLast = null;
while (($pos = strpos($haystack, $needle, $pos+1)) !== false) {
    $secondLast = $last;
    $last = $pos;
}
if (!is_null($secondLast)) {
    echo 'second last occured on '.$secondLast;
}

(Plz Yanılıyorsam beni düzeltin, ve PHP yazmak için nasıl) bir regexp arayın:

    r'x[^x]*x[^x]*$'.replace('x',your_char)

I don't think this can be done with strrpos because the position start does not work in the way you would expect.

Orada herhangi bir aşikar yolu afaik değil, ama bu işlev bunu yapmalıdır. (Gerçekten test, ama ben işe düşünüyorum değil).

    /** Return the position of the second last needle in haystack or false if nothing is found. I really hate functions with return types that depend on their input, but this function is made to look like the similary php functions (strpos, strrpos and so on) */

// Needle must be a char. If you want it to be a string instead, just substr
// length of needle instead of 1 in this example.
    function findSecondLastChar($needle,$haystack) {
      $found=0;
      for($pos=strlen($haystack)-1;$pos>=0;$pos--) {
        if(substr($haystack,$pos,1)==$needle) {
          if($found++ == 1)
            return $pos;
        }
      }
       // If we reach this, nothing were found
       return false;
    }

Ben "patlayabilir" yöntemini kullanarak bir dizideki tüm oluşumu pozisyonları depolamak ve daha sonra son dizi konumuna saniye olsun, ve çıkış konumunu veya onunla gerekenleri yapardı.