[英]PHP opposite of array_filter?
我對array_filter很熟悉,並且我想嘗試更多的功能,但是我想知道是否有辦法保留丟棄的值? 例如,如果我有一個類似的數組:
<?php
$arr = array( 1, 2, 3, 4 );
$arrGreaterThanTwo = array_filter($arr, function($item){
return $item > 2;
});
結果將是:array(3,4)。
最后,我只想使用array_filter循環一次,並將丟棄的值也保存到單獨的數組中。
提前致謝!
如果要獲取除過濾后的值以外的其他數組值,請使用array_diff()
array_diff —計算數組的差
$arrRemaining = array_diff($arr, $arrGreaterThanTwo);
輸出:
Array
(
[0] => 1
[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
一樣的功能接口。
更新的回應
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;
} ) );
有人對此有疑問嗎?
我可能建議您為此編寫自己的函數。 這是array_bifilter
–而不是返回一個數組,而是返回兩個。 第一個是真實值,第二個是虛假值。 是的,它只遍歷輸入數組一次。
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
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.