我有一個頁面,其中我將所有複選框發佈到我的數據庫中的一個數組中。 我的數據庫中的值如下所示:「0,12,0,15,58,0,16」。 現在我列出這些數字,一切工作正常,但我不想零值在我的網頁上列出,我怎麼能夠搜索數組,並不列出零值?PHP - 字符串搜索數組
我正在爆炸數組並使用每個循環來顯示當前的值。
我有一個頁面,其中我將所有複選框發佈到我的數據庫中的一個數組中。 我的數據庫中的值如下所示:「0,12,0,15,58,0,16」。 現在我列出這些數字,一切工作正常,但我不想零值在我的網頁上列出,我怎麼能夠搜索數組,並不列出零值?PHP - 字符串搜索數組
我正在爆炸數組並使用每個循環來顯示當前的值。
做正確的事情是插入一個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
}
$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值的所有值。
這不會起作用,即'$ string =「1,2,3,4,0」;' – 2013-04-08 22:37:53
@MichaelThessel刪除了這個。由於腳本將被標點符號爆炸..然後它會自動刪除 – 2013-04-08 22:38:57
您可以使用array_filter。如果要刪除自定義條件上的項目,也可以在此函數中指定回調函數。
爲了清理一組元素,可以使用array_filter
方法。
爲了清理零的,你應該做到以下幾點:
function is_non_zero($value)
{
return $value != 0;
}
$filtered_data = array_filter($data, 'is_non_zero');
,如果你需要遍歷多次數組這樣,零點就已經被從中刪除。
也許嘗試:
$out = array_filter(explode(',', $string), function ($v) { return ($v != 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上面。
Oneliner:
$string = '0,12,0,15,58,0,16';
echo preg_replace(array('/^0,|,0,|,0$/', '/^,|,$/'), array(',', ''), $string); // output 12,15,58,16
謝謝你的快速反應它解決了我處理這個問題,並沒有任何線索,我可以很容易地解決它這一點。我想我會時不時地過分複雜化。 – Skugga 2013-04-08 22:24:28
嗯,這是一個常見問題。我每個程序員現在都有這個問題。問題是代碼總是更高效,更快或更簡單。只需花點時間來查看或詢問問題。不要盯着自己的代碼並暫停。它是最好的補救措施:p – 2013-04-08 22:28:18