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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: array_filter

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помогите разобраться
Виктор
Отправлено: 11 Мая, 2021 - 16:18:30
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




Почему так
$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;});

не работает
и как заставить?
 
 Top
Мелкий Супермодератор
Отправлено: 11 Мая, 2021 - 16:30:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А почему бы должно работать? Сравниваете несуществующую переменную $b и число 12. Потом присваиваете переменной $condition результат сравнения строки с несуществующей переменной. В этот самым момент условие и вычисляется. Таким образом в array_filter передаёте константное условие и, следовательно, сам array_filter лишний.


-----
PostgreSQL DBA
 
 Top
Виктор
Отправлено: 11 Мая, 2021 - 16:43:28
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




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



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




При $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;});


-----
PostgreSQL DBA
 
 Top
Виктор
Отправлено: 11 Мая, 2021 - 19:29:58
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




Спасибо за ответ. То что Вы показали я уже показывал в примере 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;});
 
 Top
don.bidon
Отправлено: 12 Мая, 2021 - 02:54:40
Post Id


Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




Посмотрите в сторону https://www.php.net/manual/ru/function.eval.php
Но чувствую, что плохое советую )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB