2015-03-25 124 views
0

我想从我的WordPress数据库中获取所有的页面标题。 因此,我创建像查询:
$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = 'company_name' ORDER BY meta_value ASC");foreach逻辑不重复html

之后,一个循环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>

他每次重复---------A---------

阵列的foreach遍历有些愚蠢的原因我无法弄清楚如何不重复这一点。 我真的不想创建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>';}          
    } 
+0

不确定你的问题。但似乎你可以使用一些数组排序功能。 – 2015-03-25 12:12:39

+0

哪个变量是--------- A ---------存放在?或者是通过基于ID的CSS/JS完成的? – hlh3406 2015-03-25 12:17:36

+0

哦,我认为你误解了我的问题,或者我不清楚它。我想通过它的第一封信分离所有公司。所以------- A ------只是表明所有以字母A开头的公司应该放在哪里 – Interactive 2015-03-25 12:19:12

回答

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被击中。如果它第二次被击中,那么我的变量现在设置为1,它不会再显示你的标题。

+0

PHP不接受'int i = 0;',原因如下:'解析错误:语法错误,意外的T_STRING' – Interactive 2015-03-25 12:37:25

+0

改变了我的答案 - 忘记$ signs抱歉!你也不需要int – hlh3406 2015-03-25 12:40:14

+0

这么近。我仍然得到多个'A'实例。但是,如果我将'$ i == 0'设置为'$ i = 0',则不会显示任何内容。 – Interactive 2015-03-25 12:46:16

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>'; 
} 
+0

看起来不错。然而,我在这里的时间表,不能花时间,我已经做好了。如果我有更多的时间,我们会着眼于它。谢谢 – Interactive 2015-03-25 12:47:14