2015-04-24 126 views
3

我必須通過從選擇字段中刪除空白選項?

foreach ($groups as $a){ 

    if($a['label'] != NULL){  

     echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 

    } 

} 

我的問題,從數據庫(Magento的)獲取和呼應選擇一個相當簡單的選擇字段,即使服務器端代碼防止空字段,我仍然得到空選項字段

我也有這個JavaScript按字母順序排列我的選項,這可能導致我有空白選項?

      function sortlist() 
          { 
           var cl = document.getElementById('group_id'); 
           var clTexts = new Array(); 

           for(i = 2; i < cl.length; i++) 
           { 
            clTexts[i-2] = 
             cl.options[i].text.toUpperCase() + "," + 
             cl.options[i].text + "," + 
             cl.options[i].value; 
           } 

           clTexts.sort(); 

           for(i = 2; i < cl.length; i++) 
           { 
            var parts = clTexts[i-2].split(','); 

            cl.options[i].text = parts[1]; 
            cl.options[i].value = parts[2]; 
           } 
          } 


          sortlist(); 

一個人怎麼能使用JavaScript確保顯示在下拉列表中選擇無空白選擇?

情況:我的foreach

數據源中沒有包含空白字段

我得到許多空白選項合法選擇

最終結果的源代碼如下所示:

enter image description here

+2

你試過'如果(空($ A [ '標籤'])!)'? –

+0

如果($ a ['label']!= NULL && $ a ['label']!='')更好用,而不是JS –

+0

上的繼電器。如果($ a ['label']!='') – BCM

回答

3

這應該工作得很好,你也沒有關閉標籤這是造成一些問題,當我測試。你也不應該在循環中每次回聲。創建一個變量並在循環外一次回顯。

$options = ''; 
foreach ($groups as $a) 
{ 
    if(!empty($a['label'])) 
    { 
     $options .= "<option value='".$a['value']."'>" . $a['label'] . "</option>"; 
    } 
} 
echo $options; 
+0

'!='''和'!= NULL'是一回事。 http://php.net/manual/en/types.comparisons.php在多維數組索引中,當它等價於使用'empty()時,不應該使用'!='''或'!= NULL' )',空例外也驗證'isset()'來防止未知的索引錯誤。 EG:'!empty($ a ['label'])'與isset($ a ['label'])&& $ a ['label']!=''' – fyrye

+0

感謝您的修復,刪除了downvote。 – fyrye

+1

哎呀,謝謝你的收穫!你是對的,對不起,我粘貼了我的代碼的錯誤版本。我創建了一個小測試來確保它可以工作! – Eko3alpha

0

試用empty

if(!empty(trim($a['label']))) { 
    ... 

一旦你將尋找到這個解決方案,你也可能會遇到isset這是不是你需要什麼比較,因爲有你isset if語句,即使它是一個空字符串將評估爲true。

+0

這是行不通的。同樣的結果,如果($ a ['label']!= NULL) – zak

+0

當你查看'$ a ['label']'的內容時,你看到了什麼內容,當它看起來是空的,同時它不是null? – leopik

0

使用empty()將跳過0

if(!(!isset($a['label']) || $a['label']=='' || !isset($a['value']) || $a['value']=='')) { 
      //logic here 
} 
+0

和以前一樣的結果。我相信這個問題是由服務器端引起的 – zak

+0

@zak你可以請一些來自'$ groups'的數據 – Parixit

0

我覺得NULL來了作爲一個字符串。試試這個

foreach ($groups as $a){ 

if($a['label'] != 'NULL'){ //wrap NULL to single quote 

    echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 

} 

} 
+0

當然,只有當返回的行實際上是字符串「NULL」時纔會工作? – zak

0

如果$a['label']包含多一個空格,它將不等於NULL或爲空。

foreach ($groups as $a) { 
    $label = trim($a['label']); 
    $value = trim($a['value']); 
    if (!empty($label)) {  
     echo "<option value='$value'>$label<option>"; 
    } 
} 
+0

沒有$ a ['label']是NULL,問題是客戶端 – zak

0

也許你的陣列$groups帶有空值,所以儘量array_filter

$groups = array_filter($groups); 
foreach ($groups as $a) { 
... 
+1

'array_filter'不能遞歸地在多維數組上工作,需要添加一個自定義函數來檢查子數組。請參閱:http://ideone.com/Mkr1kt – fyrye

+0

美景! +1 @fyrye –

0

眼前的問題,我用你的代碼中看到的是你是混合在HTML雙人和單引號和失蹤閉幕選項標籤。 <select id=""> VS <option value=''>

你應該改變你的PHP輸出像這樣:

foreach ($groups as $a) { 
    echo '<option value="'.$a['value'].'">' . $a['label'] . '</option>'; 
} 

我喜歡用array_filter對於喜歡這些東西。它允許您在視圖內的附加條件檢查之外指定您自己的方法。

$groups = array(
    array(
     'label' => '', 
     'value' => '' 
    ), 
    array(
     'label' => 'test', 
     'value' => 'test' 
    ) 
); 

function validate($var) 
{ 
    return !empty($var['label']); 
} 

$groups = array_filter($groups, 'validate'); 
foreach ($groups as $a) { 
    echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 
} 

http://ideone.com/h0Wk1T

此外,除非你是動態使用Javascript(的onclick /用戶操作)按字母順序排序的值,我建議你使用array_filter後,用你的PHP組進行排序。更少受挫,並且不依賴於客戶端兼容性。

function cmp($a, $b){ 
    return strcmp($a['label'], $b['label']); 
} 

usort($groups, 'cmp'); 

http://ideone.com/OH5vXL

0

試試這個代碼:

foreach ($groups as $a){ 

    if(trim($a['label']) != ''){  

     echo "<option value='".$a['value']."'>" . $a['label'] . "<option>"; 

    } 

} 
+0

爲什麼會這樣工作? – zak