2013-07-01 2 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

Explode строку ссылку на «| ', затем используйте 0-й элемент результирующего массива –

ответ

1

Вы можете использовать выражение regullar \|.*$, чтобы удалить все после первого |

Пример кода с использованием preg_replace

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

Просто используйте этот код, в котором вам нужно поставить ссылку, и вы хорошо, если ссылка только index.php или index.php|some.php и т.д ...

+0

Я пробовал это и отлично, спасибо! –

1

Это

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

возвращается ложь, когда связь как 'index.php', так что вы делаете:

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

Спасибо, я использовал preg_replace, проще для noob, как я :) –

Смежные вопросы