[英]PHP filter a database table column into an A-Z listing
這是到目前為止,我不知道該去哪里:
// 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
好吧,您需要首先組織您的想法:html代碼將具有鏈接,每個鏈接都以常規格式調用字母
php腳本的第一部分將必須為變量分配您將通過鏈接發送的值
<?
$a=$_GET["letter"];
?>
腳本的第二部分將必須連接到數據庫,並使用循環將每一行讀取為數組,每次獲取數組的位置為“ company”,並且如果字符串的第一個字符
$result=array();
在索引i的循環內
if ($str[0]==$a{
$result[$i]=$query_result;
}
等於$ a然后將其保存到新數組
腳本的第三部分是一個循環,用於打印出最后一個數組
foreach ($result as $value) {
echo $value;}
使用類似於以下代碼:
$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
您不需要為此使用正則表達式來輸出所有字母,首先執行以下操作:
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}%'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.