0

这是我到目前为止所拥有的,我现在不知道该去哪里:

  // print A-Z Filter based on names of companies
  $qry = db_select('cloud_computing_capability_data', 'cd');
  $qry -> fields('cd', array(
    'company',
  ))
  -> orderBy('company', 'ASC');

  $names = array('company');
  $output = preg_grep('/^[a-z]/i', $names);
  print_r( $output);

第二次尝试

//    $letter = $_GET['company']
//  $regex = '/^'.$letter.'/i';
//  if ($letter == '#') $letter = '[0-9]';
//  $result = preg_grep($regex, $qry);

我有一个名为cloud_computing_capability_data的表,该列名为company

我需要做的是我需要创建一个 AZ 列表......所以:

# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

当你点击字母时,它会弹出一个表格,如果我点击 A,则只有以 A 开头的单词,如果我点击 # 符号,则只有以数字开头的单词。

我正在考虑使用正则表达式来完成此操作,但我不想创建 27 个不同的页面。那么有没有办法在网址末尾调用字母?就像创造可以做到这一点的东西

http://mywebsite.com/site/list?letter=A
4

3 回答 3

1

好吧,您首先需要组织您的想法:html代码将具有链接,每个链接都以常规形式调用字母

php 脚本的第一部分必须将您将通过链接发送的值分配给一个变量

 <?
 $a=$_GET["letter"];
 ?>

脚本的第二部分将必须连接到数据库并使用循环将每一行作为数组读取,每次获取数组位置“公司”,如果字符串的第一个字符

 $result=array();

在索引 i 的循环内

 if ($str[0]==$a{
     $result[$i]=$query_result;
 }

等于 $a 然后将其保存到新数组

脚本的第三部分是一个循环打印出最后一个数组

 foreach ($result as $value) {
       echo $value;}
于 2013-05-29T14:06:48.497 回答
0

你不需要为此使用正则表达式,输出所有的字母,首先做这样的事情:

foreach(range('A','Z') as $letter)
{
    echo '<a href="directory.php?letter=' . $letter . '">' . $letter . '</a>';
}

然后,在您的 directory.php 页面上,您需要使用$_GET.

$letter = isset($_GET['letter']) ? mysql_real_escape_string($_GET['letter']) : false;

现在您已经收到了这封信,您只需要选择以它开头的结果,为此,您可以使用 WHERE 语句(我不确定您使用的是什么 DB 类)。

WHERE `company` LIKE '{$letter}%'
于 2013-05-29T13:58:19.290 回答
0

使用与此类似的代码:

$letter = $_GET['letter'];

$result = $db->prepare("
    SELECT * 
    FROM tableName 
    WHERE fieldName LIKE :letterToSearch 
    ORDER BY fieldName ASC
");

$result->bindValue(':letterToSearch', $letter . '%');
$result->execute();

我使用了一个基本的 PDO 查询来查找fieldName以字母 A 或 B 开头的字段(将其更改为其他内容)中的结果,或者您传递给的任何内容$letter

于 2013-05-29T13:56:56.650 回答