foreach逻辑不重复html

时间:2015-03-25 12:07:47

标签: php mysql arrays wordpress logic

我想从我的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 var包含<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>';}                                    
    }

2 个答案:

答案 0 :(得分:1)

确定修改代码的一个非常简单的方法是执行以下操作:

设置外部变量:

$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,它不会再次显示您的标题。

答案 1 :(得分: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>';
}