2013-04-08 398 views
1

我有一個頁面,其中我將所有複選框發佈到我的數據庫中的一個數組中。 我的數據庫中的值如下所示:「0,12,0,15,58,0,16」。 現在我列出這些數字,一切工作正常,但我不想零值在我的網頁上列出,我怎麼能夠搜索數組,並不列出零值?PHP - 字符串搜索數組

我正在爆炸數組並使用每個循環來顯示當前的值。

回答

2

做正確的事情是插入一個WHERE語句到你的數據庫查詢:

SELECT * FROM table WHERE value != 0 

但是,如果僅限於PHP只使用下面的代碼:)

foreach($values AS $key => $value) { 
     //Skip the value if it is 0 
     if($value == 0) { 
     continue; 
     } 

     //do something with the other values 
    } 
+0

謝謝你的快速反應它解決了我處理這個問題,並沒有任何線索,我可以很容易地解決它這一點。我想我會時不時地過分複雜化。 – Skugga 2013-04-08 22:24:28

+0

嗯,這是一個常見問題。我每個程序員現在都有這個問題。問題是代碼總是更高效,更快或更簡單。只需花點時間來查看或詢問問題。不要盯着自己的代碼並暫停。它是最好的補救措施:p – 2013-04-08 22:28:18

0
$String = '0,12,0,15,58,0,16'; 
$String = str_replace('0', '',$String); // Remove 0 values 
$Array = explode(',', $String); 
foreach ($Array AS $Values) { 
    echo $Values."<br>"; 
    } 

解釋:

你有你的複選框,可以說這些值已被轉換成一個字符串。使用str_replace我們已經從你的字符串中刪除了所有的0值。然後我們使用explode並使用foreach循環來創建一個數組。我們正在迴應th數組minux 0值的所有值。

+0

這不會起作用,即'$ string =「1,2,3,4,0」;' – 2013-04-08 22:37:53

+0

@MichaelThessel刪除了這個。由於腳本將被標點符號爆炸..然後它會自動刪除 – 2013-04-08 22:38:57

0

您可以使用array_filter。如果要刪除自定義條件上的項目,也可以在此函數中指定回調函數。

1

爲了清理一組元素,可以使用array_filter方法。

爲了清理零的,你應該做到以下幾點:

function is_non_zero($value) 
{ 
    return $value != 0; 
} 

$filtered_data = array_filter($data, 'is_non_zero'); 

,如果你需要遍歷多次數組這樣,零點就已經被從中刪除。

+0

爲了返回非零值,我認爲它需要:return $ value!= 0; – Abela 2013-04-08 22:30:36

+0

@Yhanhannan真,固定。 – Lumbendil 2013-04-08 22:32:23

0

也許嘗試:

$out = array_filter(explode(',', $string), function ($v) { return ($v != 0); }); 
0

有辦法做到這一點了很多,這從上述問題的答案顯而易見。

雖然這不是最好的方法,但是對於phpnewbies來說,這樣做的邏輯可能比以上某些方法更容易理解。如果您需要保留原始值以便在以後的過程中使用,也可以使用此方法。

$nums = '0,12,0,15,58,0,16'; 
$list = explode(',',$nums); 
$newList = array(); 
foreach ($list as $key => $value) { 
    // 
    // if value does not equal zero 
    // 
    if ($value != '0') { 
     // 
     // add to newList array 
     // 
     $newList[] = $value; 
    } 
} 
echo '<pre>'; 
print_r($newList); 
echo '</pre>'; 

但是,我的最佳答案投票轉到@Lumbendil上面。

0

Oneliner:

$string = '0,12,0,15,58,0,16'; 
echo preg_replace(array('/^0,|,0,|,0$/', '/^,|,$/'), array(',', ''), $string); // output 12,15,58,16