2017-05-04 131 views
-3

我在上线66 注意这段代码有问题1线66注意:初始化的字符串偏移:未初始化字符串偏移量:1

<?php 
echo cologne_phon("d"); 
echo "<br />"; 
echo cologne_phon("ch dc"); 
echo "<br />"; 
echo cologne_phon("dc"); 

function cologne_phon($word){ 

    /** 
    * @param string $word string to be analyzed 
    * @return string $value represents the K?lner Phonetik value 
    * @access public 
    */ 

    //prepare for processing 
    $word=strtolower($word); 
    $substitution=array(
         "?"=>"a", 
         "?"=>"o", 
         "ü"=>"u", 
         "?"=>"ss", 
         "ph"=>"f" 
         ); 

    foreach ($substitution as $letter=>$substitution) { 
     $word=str_replace($letter,$substitution,$word); 
    } 

    $len=strlen($word); 

    //Rule for exeptions 
    $exceptionsLeading=array(
          4=>array("ca","ch","ck","cl","co","cq","cu","cx"), 
          8=>array("dc","ds","dz","tc","ts","tz") 
          ); 

    $exceptionsFollowing=array("sc","zc","cx","kx","qx"); 

    //Table for coding 
    $codingTable=array(
         0=>array("a","e","i","j","o","u","y"), 
         1=>array("b","p"), 
         2=>array("d","t"), 
         3=>array("f","v","w"), 
         4=>array("c","g","k","q"), 
         48=>array("x"), 
         5=>array("l"), 
         6=>array("m","n"), 
         7=>array("r"), 
         8=>array("c","s","z"), 
         ); 

    for ($i=0;$i<$len;$i++){ 
     $value[$i]=''; 

     //Exceptions 
     if ($i==0 && $word[$i]=='cr') 
      $value[$i]=4; 

     foreach ($exceptionsLeading as $code =>$letters) { 
      if (in_array($word[$i].$word[$i+1],$letters)){ 
       $value[$i]=$code; 
      } 
     } 

     if ($i!=0 && (in_array($word[$i-1].$word[$i], 
           $exceptionsFollowing))) { 
      $value[$i]=8;   
     }     

     //Normal encoding 
     if ($value[$i]==""){ 
      foreach ($codingTable as $code=>$letters) { 
       if (in_array($word[$i],$letters))$value[$i]=$code; 
      } 
     } 
    } 

    //delete double values 
    $len=count($value); 

    for ($i=1;$i<$len;$i++){ 
     if ($value[$i]==$value[$i-1]) $value[$i]=""; 
    } 

    //delete vocals 
    for ($i=1;$i>$len;$i++){//omitting first characer code and h 
     if ($value[$i]==0) $value[$i]=""; 
    } 

    var_dump($value); 
    $value=array_filter($value); 
    $value=implode('',$value); 

    return $value; 
} 

我尝试修复,但没有工作了很多方式与我所以需要帮助,请 原代码在这里PHP网站 http://php.net/manual/en/function.soundex.php#84881

+0

哪一行出现错误? – Barmar

+0

请修复您的缩进。 – Barmar

+0

'我尝试了很多方法来解决问题' - 但是为了理解这条消息首先意味着什么? [什么原因:“注意:未初始化的字符串偏移量”出现?](http://stackoverflow.com/q/1263636/1235698) –

回答

0

的问题是在这条线:

 if (in_array($word[$i].$word[$i+1],$letters)){ 

在循环的最后一次迭代中,$word[$i]$word的最后一个字符,并且没有$word[$i+1]。你应该改变这个来检查你是不是在字符串的末尾:

 if ($i < $len - 1 && in_array($word[$i].$word[$i+1],$letters)){ 
+0

tyvm现在工作正常 –