2013-07-01 37 views
0

我想知道我在做什么这个代码中有错误..PHP substr来自一个字符

我想从数据库生成一个菜单,但我有一个问题。有些链接是正常的,像“index.php”,但有些看起来像数据库中的“browse.php | some.php | other.php”。我想过滤并返回所有正常值,如“index.php”和在出现“怪异链接”的地方,只需切断“|”之外的任何内容即可字符,并成为“browse.php”。现在,随着我使用的代码,index.php不再出现,但奇怪的链接问题解决..我做错了什么?

谢谢你的任何建议..

$sql = "SELECT * FROM $tablename WHERE `Parent` = '0' AND Type LIKE 'top' ORDER BY `Order` ASC"; 
    $result = mysql_query($sql) or die ("Error: Query Failed! " .mysql_error()); 
    $output = "<ul>"; 
    while ($rs = mysql_fetch_array($result)) { 
     $output .= "<li class='menu_top' id='".$rs['ID']."'><a href='".substr($rs['Link'], 0, strpos($rs['Link'], '|'))."'>".$rs['Name']."</a></li>"; 
     //$output .= "<li class='menu_top' id='".$rs['ID']."'><a href='".$rs['Link']."'>".$rs['Name']."</a></li>"; 
     $sql2 = "SELECT * FROM $tablename WHERE `Parent` = '".$rs['ID']."' ORDER BY `Order` ASC"; 
     $result2 = mysql_query($sql2) or die ("Error: Query Failed! " .mysql_error()); 
     if (mysql_num_rows($result2) != 0) { 
      $output .= "<ul class='menu_sub' id='".$rs['ID']."'>"; 
      while ($rs2 = mysql_fetch_array($result2)){ 
      $output .= "<li><a href='".$rs2['Link']."'>".$rs2['Name']."</a></li>"; 
      } 
      $output .= "</ul>"; 
     } 
    } 
    $output .="</ul>"; 
    echo $output; 
+2

爆炸的“链路串| ',然后使用结果数组的第0个元素 –

回答

1

您可以使用regullar表达式\|.*$删除首先后的所有内容|

使用示例代码的preg_replace

// returns only first link before | 
preg_replace('/\|.*$/','',$link); 

,你需要把链接,且是罚款,如果链接只有index.phpindex.php|some.php等就使用此代码...

+0

我试过这个,很完美,谢谢! –

1

strpos($rs['Link'], '|') 

是返回false时链接就像 '的index.php',所以你在做:

substr($string, 0, false); 
+0

谢谢你,我用preg_replace,比较容易像我这样的noob :) –

相关问题