2012-02-28 84 views
0

我有一個PHP數組比較PHP數組的所有值與其他值

我如何比較這陣列的所有值,並篩選出基於自定義邏輯值(回調函數可能)。

從本質上講,我想每個數組值與陣列中的所有其他值進行比較,並根據一些自定義邏輯,要麼保留值或從陣列中刪除它

感謝

+2

['array_filter'](http://php.net/manual/en/function.array-filter.php)想起來,或者只是遍歷數組。有什麼問題嗎? – 2012-02-28 13:59:30

+0

嗨。 array_filter將回調應用於數組的每個元素。我正在尋找比較數組元素的東西。像usort()這給你2個參數,你決定如何排序將發生 – Thomas 2012-02-28 14:05:53

+0

然後做一個嵌套的'for'循環。 – 2012-02-28 14:07:07

回答

1

也許你不得不手動操作:

function your_callback($a, $b) 
{ 
    return $a != $b; 
}  
$array = array(/** Your array here... **/); 
$n = count($array); 
$filtered = array(); 
for($i = 0; $i < $n; $i++) 
{ 
    $ok = true; 
    for($j = 0; $j < $n; $j++) 
    { 
     if($j != $i && !your_callback($array[$i], $array[$j]) 
     { 
     $ok = false; 
     break; 
     } 
    } 
    if($ok) 
     array_push($filtered, $array[$i]); 
} 
unset($array); 
$array = $filtered; 

本例將過濾數組的唯一值,例如:更改your_callback定義以實現其他邏輯。

0

您可以調用array_map,將您的回調作爲第一個參數傳遞,並將您的數組作爲第二個參數和第三個參數傳遞兩次。在回調函數中,如果需要,可以遍歷「second」數組並返回元素。

0

如果您正在尋找與流程的一個數組的值進行比較一個數組的值,那麼我的代碼是非常簡單的:看看這個它的工作是這樣的:

如果(陣列-1的第一個值等於陣列-2的第一值){$解析度= $ RES + 5}

if($_POST){ 
$res=0; 
$r=$_POST['Radio1']; //array-1 
$anr=$_POST['answer']; //array-2 
$arr=count($r); 

for($ac=0; $ac<$arr; $ac++){ 

if($r[$ac]==$anr[$ac]){ 
$res=$res+5; 

} 
} 
echo $res; 
}