【问题标题】:PHP substr from a characterPHP substr 来自一个字符
【发布时间】:2013-07-01 09:14:17
【问题描述】:

我想知道我在这段代码中做错了什么..

我正在尝试从数据库中生成菜单,但我遇到了问题。有些链接是正常的,如“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;

【问题讨论】:

  • 分解'|'上的链接字符串,然后使用结果数组的第0个元素

标签: php substr


【解决方案1】:

您可以使用正则表达式 \|.*$ 删除第一个 | 之后的所有内容

使用 preg_replace 的示例代码

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

只需在需要放置链接的地方使用此代码,如果链接只有 index.phpindex.php|some.php 等,你就可以了...

【讨论】:

    【解决方案2】:

    这个

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

    当链接类似于'index.php'时返回false,所以你正在这样做:

    substr($string, 0, false);
    

    【讨论】:

    • 谢谢,我使用了 preg_replace,对于像我这样的菜鸟来说更容易:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多