У меня есть php-массив
Как я могу сравнить все значения этого массива и отфильтровать значения на основе пользовательской логики (возможно, функция обратного вызова).
По сути, я хочу сравнить каждое значение массива со всеми другими значениями в массиве и на основе некоторой пользовательской логики либо сохранить значение, либо удалить его из массива
благодаря
Возможно, вам нужно сделать это вручную:
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;
с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 для реализации другой логики.
Вы можете вызвать array_map, передать ваш обратный вызов в качестве первого аргумента и передать ваш массив дважды, как второй и третий аргументы. В функции обратного вызова вы выполняете цикл «второй» и возвращаете элемент, если хотите.
Если вы хотите последовательно сравнивать значения одного массива со значениями другого массива, тогда мой код очень прост: проверьте, будет ли он работать следующим образом:
if (1-е значение массива-1 равно 1-му значению массива-2) {$ res = $ 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; }
-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; }