2011-11-23 34 views
-1

可能重复:
Is there a PHP function to remove any/all key/value pairs that have a certain value from an array?
Remove zero values from a PHP arraycreate_function在PHP

我有一个阵列是这样的。

[notify_emp] => Array 
    (
     [224] => 0 
     [228] => 0 
     [232] => 1 
     [250] => 1 
     [350] => 1 
) 

我只想从数组这些密钥已经值设置为1,需要删除具有值0键我 怎么能做到这一点使用create_function在PHP?或者有没有其他方法可以执行此操作?

+0

我不明白为什么要使用'create_function'在这里。 –

回答

1

试试这个:

<?php 
function hasOne($var) 
{ 
    // returns whether the input has 1 
    return($var == 1); 
} 


$arr= array("224"=>1, "228"=>0, "250" => 1); 

print_r(array_filter($arr, "hasOne")); 
?> 

,这导致:如果你使用PHP 5.3,然后使用array_filter用匿名函数

Array ([224] => 1 [250] => 1) 
+2

请注意,在这种情况下'array_filter'不需要回调;它默认在转换为布尔值时过滤掉所有等价于'FALSE'的值。 – outis

+0

你是对的,在这篇文章之后,我做了一些更多的研究,你需要的只是'array_filter($ arr)' – Niels

0

是少了很多鬼混在一起;

如果您使用5.3之前的PHP版本,那么只需使用array_filter作为回调函数实现一个函数就比使用create_function()少。

2
$array = array_filter($array, create_function('$val', 'return (bool) $val;')); 

...或PHP> = 5.3:

$array = array_filter($array, function ($val) { 
    return (bool) $val; 
}); 

...或者干脆(如@outis正确地指出),你可以简单地

$array = array_filter($array); 

...或者你可以:

foreach ($array as $k => $v) { 
    if (!$v) unset($array[$k]); 
} 

随你的选择。

不过,我想你想要的是项目与“开”标志的列表,所以这可能是一个更好的办法:

$flaggedAsOn = array_keys($array,'1'); 
0
remove_unwanted ($array) { 

    foreach ($array as $key => $value) { 

     if ($array[$key] == '0') { unset($array[$key]) } 

    } 

}