2013-04-08 207 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