Предупреждение PHP: array_filter () ожидает, что параметр 2 будет допустимым обратным вызовом, второй член массива не является допустимым методом

Первоначально у меня был этот большой массив, который я получил из своей базы данных в сокращенной версии:

$arreglo =Array
(
"0" => Array
(
"concurso" => 2600,
"R1" => 1
),

"1" => Array
(
"concurso" => 2602,
"R1" => 1
),

"2" => Array
(
"concurso" => 2603,
"R1" => 1
),

"3" => Array
(
"concurso" => 2648,
"R1" => 1
),

"4" => Array
(
"concurso" => 2653,
"R1" => 1
),

"5" => Array
(
"concurso" => 2655,
"R1" => 1
),

"6" => Array
(
"concurso" => 2698,
"R1" => 1
),

"7" => Array
(
"concurso" => 2722,
"R1" => 1
),

"8" => Array
(
"concurso" => 2741,
"R1" => 1
),

"9" => Array
(
"concurso" => 2743,
"R1" => 1
),

"10" => Array
(
"concurso" => 2744,
"R1" => 1
),

"11" => Array
(
"concurso" => 2745,
"R1" => 1
),

"12" => Array
(
"concurso" => 2763,
"R1" => 1
),

"13" => Array
(
"concurso" => 2778,
"R1" => 1
),

"14" => Array
(
"concurso" => 2780,
"R1" => 1
),

"15" => Array
(
"concurso" => 2782,
"R1" => 1
),

"16" => Array
(
"concurso" => 2607,
"R1" => 2
),

"17" => Array
(
"concurso" => 2609,
"R1" => 2
)
);

Это продолжается до тех пор, пока значение элемента «R1» не станет 56.

Поэтому я хочу отделить каждый набор значений R1, например, просто когда R1 равен 1, я сохраняю каждое значение «concurso» в массиве с именем «$ concursos», используя следующую функцию:

function category($var)
{
return (is_array($var) && $var['R1'] == 1);
}
$current=array_filter($arreglo,"category");

До сих пор все работает нормально, так как, когда R1 = 1, я получаю только тот список контрагентов, когда R1 = 1, следующим образом:

Array
(
[0] => 2600
[1] => 2602
[2] => 2603
[3] => 2648
[4] => 2653
[5] => 2655
[6] => 2698
[7] => 2722
[8] => 2741
[9] => 2743
[10] => 2744
[11] => 2745
[12] => 2763
[13] => 2778
[14] => 2780
[15] => 2782
)

Проблема в том, что если я хочу сделать это снова для следующих чисел, где R1 = 2,3, … 56 внутри цикла for, то вместо указания == 1 я бы установил == $ currentR1, в функция как это:

function category($var)
{
return (is_array($var) && $var['R1'] == $currentR1);
}
$current=array_filter($arreglo,"category");

Теперь проблема в том, что если я пытаюсь поставить аргумент, вызов функции завершается неудачно, как я могу указать здесь параметр?

Я пытался, например,

$current=array_filter($repeticiones,array('category',$l));

и это не предупреждает меня

Предупреждение: array_filter () ожидает, что параметр 2 будет допустимым обратным вызовом, второй член массива не является допустимым методом в myScript.php в строке X

Тогда как я могу указать параметр?

2

Решение

Вы можете использовать анонимную функцию, например:

$r = 2;
$current = array_filter($arreglo, function($var) use ($r){
// ^ import variable to the closure scope
return (is_array($var) && $var['R1'] == $r);
});
4

Другие решения

Вы можете написать функцию, которая возвращает другую функцию, которую вы можете передать array_filter():

function categoryFunction($someVar)
{
return function($var) use ($someVar) {
return (is_array($var) && $var['R1'] == $someVar);
};
}

$current=array_filter($arreglo, categoryFunction($l));
1

Используйте анонимную функцию, что-то вроде этого:

for($r = 1; $r < 56; $r++){
$current=array_filter($arreglo,function ($var) use ($r) { return ($var['R1'] == $r); });
...do something with $current...
}
1
По вопросам рекламы [email protected]