Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: array_filter
Форумы портала PHP.SU » » Вопросы новичков » array_filter

Страниц (1): [1]
 

1. Виктор - 11 Мая, 2021 - 16:18:30 - перейти к сообщению
Почему так
$sport1 = array_filter($get_csv1, function($a) {return $a[1] == 12;});

работает
а так
$b == 12;
$condition = '$a[1] == '.$b;
$sport1 = array_filter($get_csv1, function($a) use($condition) {return $condition;});

не работает
и как заставить?
2. Мелкий - 11 Мая, 2021 - 16:30:51 - перейти к сообщению
А почему бы должно работать? Сравниваете несуществующую переменную $b и число 12. Потом присваиваете переменной $condition результат сравнения строки с несуществующей переменной. В этот самым момент условие и вычисляется. Таким образом в array_filter передаёте константное условие и, следовательно, сам array_filter лишний.
3. Виктор - 11 Мая, 2021 - 16:43:28 - перейти к сообщению
Почему не существующую &b? Она существует, я опечатался в коде. $b = 12;
(Добавление)
Я опечатался. Там $b = 12; Я никак не могу понять, в первом случае все работает, а если передавать строкой - не работает...
Мелкий пишет:
А почему бы должно работать? Сравниваете несуществующую переменную $b и число 12. Потом присваиваете переменной $condition результат сравнения строки с несуществующей переменной. В этот самым момент условие и вычисляется. Таким образом в array_filter передаёте константное условие и, следовательно, сам array_filter лишний.
4. Мелкий - 11 Мая, 2021 - 17:41:32 - перейти к сообщению
При $b = 12; получаем константу в $condition как результат конкатенации строки с числом.

$string = 'a = 12';
или
$string = 'a = '.$b;
у вас удивления не вызывает? Что в $string окажется строка "a = 12"?
А в чём разница с $string = '$a = '.$b; или $string = '#a = '.$b; ? Никакой разницы. Конкатенация строки и переменной (приводимой к строке).

Могу попробовать угадать, что вы хотите сделать что-то вроде:
PHP:
скопировать код в буфер обмена
  1. $sport1 = array_filter($get_csv1, function($a) use($b) {return $a[1] == $b;});
5. Виктор - 11 Мая, 2021 - 19:29:58 - перейти к сообщению
Спасибо за ответ. То что Вы показали я уже показывал в примере 1. Это я понимаю. У меня задача динамически фильтровать. То есть условие фильтрации по нескольким полям массива. И это условие постоянно меняется. То есть нужно что-то похожее на вот это.
PHP:
скопировать код в буфер обмена
  1.  
  2.                 $b = 12; // переменные получаются динамически
  3.                 $c = 13;
  4.                 $d = 50;
  5.                 $e = 65;
  6.                 $f = 1;
  7.                 $g = 10;
  8.                
  9.                 $sport1 = array_filter($get_csv1, function($a) use($b, $c, $d, $e, $f, $g) {return $a[1] >= $b && a[1] <= $c && $a[2] >= $d && $a[2] <= $e && $a[3] >= $f && $a[3] <= $g;});   
  10.  
  11.  

Условия постоянно меняются и не все переменные имеют значения, некоторые иногда - пустая строка.
Вот и хотел сначала условие ($condition) подготовить.
Но никак не могу понять как эту строку передать array_filter Огорчение

Мелкий пишет:
При $b = 12; получаем константу в $condition как результат конкатенации строки с числом.

$string = 'a = 12';
или
$string = 'a = '.$b;
у вас удивления не вызывает? Что в $string окажется строка "a = 12"?
А в чём разница с $string = '$a = '.$b; или $string = '#a = '.$b; ? Никакой разницы. Конкатенация строки и переменной (приводимой к строке).

Могу попробовать угадать, что вы хотите сделать что-то вроде:
PHP:
скопировать код в буфер обмена
  1. $sport1 = array_filter($get_csv1, function($a) use($b) {return $a[1] == $b;});
6. don.bidon - 12 Мая, 2021 - 02:54:40 - перейти к сообщению
Посмотрите в сторону https://www.php.net/manual/ru/function.eval.php
Но чувствую, что плохое советую )

 

Powered by ExBB FM 1.0 RC1