情況:我做了一個腳本,從數據庫中讀取數據並呈現它,以便它可以由jQuery UI操作爲選項卡。jQuery UI選項卡與PHP:用foreach和當前的迭代
守則:
function renderTabs(){
$_db = array(
'host' => MYSQL_HOST,
'user' => MYSQL_USER,
'password' => '',
'database' => DB
);
$_channels = array(
'chan1' => 'db1',
'chan2' => 'db2',
'chan3' =>'db3',
'chan4' => 'db4'
);
$html = '';
$conn = new mysqli($_db['host'],$_db['user'],$_db['password'],$_db['database']);
$html .= '<div id="tabs">
<ul>';
foreach ($_channels as $i => $channel){
while($chan = current($_channels)){
echo $tab = array_search($chan,array_values($_channels));
$html .= '<li><a href="#tabs-'.$tab.'">'.array_keys($_channels)[$tab].'</a></li>';
next($_channels);}
$html .= '</ul>';
$n_tab = array_search($i,array_keys($_channels));
$n_tab++;
$results = $conn->query('SELECT * FROM table_test WHERE date BETWEEN (CURDATE() - INTERVAL 7 DAY) AND CURDATE() AND channel = \''.$channel.'\' GROUP BY id ORDER BY total DESC LIMIT 10');
$html .= '<div id="tabs-'.$n_tab.'">
<table style="width:100%">
<tr><td>TEST</td>
<td>TEST COL1</td>
<td>TEST COL2</td>
<td>TEST COL3</td>
<td>TEST COL4</td></tr>';
foreach($results as $row){
$html .= '<tr><td><a href="'.$row['url'].'">'.$row['title'].'</a></td>
<td>'.$row['data1'].'</td>
<td>'.$row['data2'].'</td>
<td>'.$row['data3'].'</td>
<td>'.$row['data4'].'</td></tr>';
}
$html .= '</table></div>';
}
$html .= '</div>';
return $html;
}
的HTML結構jQuery UI的需要呈現的標籤:
<div id="tabs">
<ul>
<li><a href="#tabs-1">tab1_title</a></li>
<li><a href="#tabs-2">tab2_title</a></li>
<li><a href="#tabs-3">tab3_title</a></li>
</ul>
<div id="tabs-1">
<p>content1</p>
</div>
<div id="tabs-2">
<p>content2</p>
</div>
<div id="tabs-3">
<p>content3</p>
</div>
</div>
的問題:我有一個問題,一個疑問。問題是隻有4個選項卡中的3個被渲染(而所有四個內容都正確生成),我不知道爲什麼。
我也使用每個()這樣的嘗試:
while($chan = each($_channels)){
echo $chan[1];
print_r(array_values($_channels));
echo $tab = array_search($chan[1],array_values($_channels));
$html .= '<li><a href="#tabs-'.$tab.'">'.array_keys($_channels)[$tab].'</a></li>';}
,但無濟於事。
懷疑:我做了上面的嘗試,以避免再次循環訪問數組,也因爲我希望能夠通過向$ _channels數組添加元素來添加或刪除選項卡(及其生成的內容)。有沒有任何方便的方法來實現這一點,而不必迭代兩次?
感謝您的支持。
編輯:我可能已經發現了這個問題,似乎在foreach一個移動的$ _channels內部指針,這就是爲什麼當前()循環返回3個元素,而不是4 我知道的重置()但它也沒用這裏..
EDIT2:這真的是一個PHP的問題,手冊說:
除非數組是被引用,foreach指定數組的一個拷貝,而不是該數組本身運行。 foreach對數組指針有一些副作用。不要在foreach期間或之後依賴數組指針而不重置它。
那麼,我怎樣才能重置指針而不破壞代碼的其餘部分?
是啊!有用! 但是,如果可能的話,我仍然希望聽到我的方法可能的解決方案。 謝謝! – TheHacker66