foreach 逻辑不重复 html
foreach logic to not repeat html
我想从我的 WordPress 数据库中获取我所有的页面标题。
所以我创建了一个查询:
$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = 'company_name' ORDER BY meta_value ASC");
之后 foreach
循环提取所有值。
我想用第一个字母分隔每个页面名称。
所以我创建了一个 substr
函数来获取第一个字母。
这一切都有效。问题如下
我需要回应这些值并将它们存储在正确的字母下。
喜欢:
---------A---------
A company
A nother company
---------B---------
B company
B nother company
所以我这样做了:
if($first == 'A')
{
echo '<a name="A"></a>
<div class="nav-indicator" id="nav-a">A</div>
<ul>'.$table.'</ul>
</li>';
}
if($first == 'B')
{
echo '<a name="B"></a>
<div class="nav-indicator" id="nav-b">B</div>
<ul>'.$table.'</ul>
</li>';
}
.... ETC.
$table
变量包含一个 <li><table>...</table></li>
每次 foreach
遍历数组时,他都会重复 ---------A---------
出于某些愚蠢的原因,我不知道如何不重复这个。
我真的不想创建 26 个不同的 foreach
循环来转换字母表中的字母。
-- 编辑 --
这是 foreach 循环:
foreach ($results as $result){
$post_id = $result->post_id;
$company_name = get_post_meta($post_id, 'company_name', true);
$first = substr($company_name, 0, 1);
$table = '<li><table cellpadding="0" cellspacing="0" border="0" width="100%" bgcolor="#FFFFFF"><tr><td width="75%"><strong>'.$company_name.'</strong></td>';
if($first == 'A'){
echo '<a name="'.$first.'"></a><div class="nav-indicator" id="nav-'.strtolower($first).'">'.$first.'</div><ul>'.$table.'</ul>';}
}
好的,修复代码的一个非常简单的方法是执行以下操作:
设置一个外部变量:
$i = 0;
if($first == 'A')
{
//Check if it's the first time in this loop.
if($i == 0){
$i = 1;
echo '<a name="A"></a>';
echo '<div class="nav-indicator" id="nav-a">A</div>';
}
echo '<ul>'.$table.'</ul>
</li>';
}
这样你就可以第一时间知道A被击中了。如果它被第二次点击,那么 i 变量现在设置为 1,它不会再次显示您的标题。
这可能对你有用。我猜到了你的对象 属性 名称 :-)
// prime an array of A-Z results
$letters = array_fill_keys(range('A', 'Z'), array());
// for each result, plop it into the correct lettered array
foreach ($results as $result) {
$letters[strtoupper($result->companyName[0])][$result->companyName] = $result;
}
// echo to screen
foreach ($letters as $letter => $companies) {
// we put the companies in key by title, so sort by key
ksort($companies);
echo '<a name="' . $letter . '"></a>
<div class="nav-indicator" id="nav-' . strtolower($letter) . '">' . $letter . '</div>
<ul>';
foreach ($companies as $company) {
echo '<li>';
// spit out your stuff
echo '</li>';
}
echo '</ul>';
}
我想从我的 WordPress 数据库中获取我所有的页面标题。
所以我创建了一个查询:
$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = 'company_name' ORDER BY meta_value ASC");
之后 foreach
循环提取所有值。
我想用第一个字母分隔每个页面名称。
所以我创建了一个 substr
函数来获取第一个字母。
这一切都有效。问题如下
我需要回应这些值并将它们存储在正确的字母下。
喜欢:
---------A---------
A company
A nother company
---------B---------
B company
B nother company
所以我这样做了:
if($first == 'A')
{
echo '<a name="A"></a>
<div class="nav-indicator" id="nav-a">A</div>
<ul>'.$table.'</ul>
</li>';
}
if($first == 'B')
{
echo '<a name="B"></a>
<div class="nav-indicator" id="nav-b">B</div>
<ul>'.$table.'</ul>
</li>';
}
.... ETC.
$table
变量包含一个 <li><table>...</table></li>
每次 foreach
遍历数组时,他都会重复 ---------A---------
出于某些愚蠢的原因,我不知道如何不重复这个。
我真的不想创建 26 个不同的 foreach
循环来转换字母表中的字母。
-- 编辑 --
这是 foreach 循环:
foreach ($results as $result){
$post_id = $result->post_id;
$company_name = get_post_meta($post_id, 'company_name', true);
$first = substr($company_name, 0, 1);
$table = '<li><table cellpadding="0" cellspacing="0" border="0" width="100%" bgcolor="#FFFFFF"><tr><td width="75%"><strong>'.$company_name.'</strong></td>';
if($first == 'A'){
echo '<a name="'.$first.'"></a><div class="nav-indicator" id="nav-'.strtolower($first).'">'.$first.'</div><ul>'.$table.'</ul>';}
}
好的,修复代码的一个非常简单的方法是执行以下操作:
设置一个外部变量:
$i = 0;
if($first == 'A')
{
//Check if it's the first time in this loop.
if($i == 0){
$i = 1;
echo '<a name="A"></a>';
echo '<div class="nav-indicator" id="nav-a">A</div>';
}
echo '<ul>'.$table.'</ul>
</li>';
}
这样你就可以第一时间知道A被击中了。如果它被第二次点击,那么 i 变量现在设置为 1,它不会再次显示您的标题。
这可能对你有用。我猜到了你的对象 属性 名称 :-)
// prime an array of A-Z results
$letters = array_fill_keys(range('A', 'Z'), array());
// for each result, plop it into the correct lettered array
foreach ($results as $result) {
$letters[strtoupper($result->companyName[0])][$result->companyName] = $result;
}
// echo to screen
foreach ($letters as $letter => $companies) {
// we put the companies in key by title, so sort by key
ksort($companies);
echo '<a name="' . $letter . '"></a>
<div class="nav-indicator" id="nav-' . strtolower($letter) . '">' . $letter . '</div>
<ul>';
foreach ($companies as $company) {
echo '<li>';
// spit out your stuff
echo '</li>';
}
echo '</ul>';
}