今天在處理自己網站的時候遇到了smarty遍曆二維數組的問題,用 $row['id']被拒,看來在smarty的文法和php還不是完全共同的。從網上查資料最後終於解決了,今天又兩點分享,如下。
一:mysql執行一次擷取共讀取的資料行數和資料
$query = "SELECT SQL_CALC_FOUND_ROWS * FROM title WHERE ID >1000 LIMIT 10;";$result = $db->query($query);$line = $db->fetch_row($db->query("SELECT FOUND_ROWS();"));
上面的代碼是我在自己項目裡面封裝的,用於擷取推薦網站數目的函數。大家會看到SQL_CALC_FOUND_ROWS ,這個是mysql的特性,如果查詢的時候在sql語句裡面查詢他的話,mysql會在執行的時候緩衝這個東西,然後你下面用select found_rows函數就可以擷取這個緩衝的上次查詢擷取行數的變數值。這也就是說你只用了一次真是的資料庫查詢操作就完成了擷取資料和count(*)的工作,值得推廣。
二:smarty裡面遍曆數組
<?php$items_list = array(23 => array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') );$smarty->assign('items', $items_list);?>
上面這段代碼就是自己造個假數組,然後把它賦值給我們的模板,讓smarty模板來填充。針對上面這種數組使我們在查詢sql資料庫返回數組最常見的一種形式,說以我們要記住它在smarty模板裡面怎麼解析。下面是代碼:
<ul>{foreach from=$items key=myId item=i} <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>{/foreach}</ul>
上面的key 和item是smarty foreach遍曆的參數,一個代表索引值對的key也就是rowname,一個是value就是我們要的值了。用foreach遍曆的時候,二維數組的第二位擷取它的值得時候用$i['id']這種傳統的php擷取數組值得方法不行,smarty裡面可以用.來訪問二維數組的值,這個很酷,彷彿是smarty把數組給咱們弄成了匿名類,具體的實現沒看,有時間看看。