2015-03-25 59 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