我熟悉array_filter,我试图想更多功能,但我想知道是否有办法保留丢弃的值?例如,如果我有一个像:
这样的数组ps aux | grep java
结果将是:array(3,4)。
最后,我只想尝试使用array_filter循环一次,并将丢弃的值保留在一个单独的数组中。
提前致谢!
答案 0 :(得分:4)
如果您希望将其他数组值与已过滤的数组值区分开来,请使用array_diff()
array_diff - 计算数组的差异
$arrRemaining = array_diff($arr, $arrGreaterThanTwo);
输出:
Array
(
[0] => 1
[1] => 2
)
答案 1 :(得分:2)
function array_partition(array $array, callable $fn){
$result = [[],[]];
foreach ( $array as $value ){
$result[$fn($value)?0:1][]=$value;
}
return $result;
}
// example usage:
$res = array_partition([1,2,3,4,5,6,7,8,9,10], function($i) { return $i&1==1;});
虽然这不是功能实现,但它具有与array_filter
类似的功能界面。
答案 2 :(得分:-1)
更新回复
function test($arrOne, $fn){
$restArr = [];
$filterResults = array_filter($arrOne, function($item) use (&$restArr, $fn) {
if( $fn($item) ) return $item;
$restArr[] = $item;
});
return array( $filterResults, $restArr );
}
print_r( test( array(1,2,3,4), function($item){
return $item > 2;
} ) );
有没有人有这个问题?
答案 3 :(得分:-1)
我可能会建议您为它编写自己的功能。这是array_bifilter
- 而不是返回一个数组,它返回两个。第一个是 truthy 值,第二个是 falsey 值。是的,它只通过输入数组迭代一次。
function array_bifilter(array $xs, callable $f) {
return array_reduce($xs, function ($acc, $x) use ($f) {
if (call_user_func($f, $x))
array_push($acc[0], $x);
else
array_push($acc[1], $x);
return $acc;
}, [[], []]);
}
list($t, $f) = array_bifilter([1,2,3,4], function($x) { return $x > 2; });
echo json_encode(['true' => $t, 'false' => $f], JSON_PRETTY_PRINT), PHP_EOL;
输出(采用JSON格式以便于阅读)
{
"true": [
3,
4
],
"false": [
1,
2
]
}