Я не уверен, что использую правильные термины даже здесь, но я попытаюсь объяснить. Я использую функцию PHP array_filter для фильтрации продуктов, и она вызывает вернуться к пользовательской функции, которую я создал, где я добавляю фильтры. Я могу очень легко сделать это жестко запрограммированным, но я, очевидно, хочу, чтобы он был динамичным:
Короче говоря, функция настраиваемого фильтра возвращается к функции array_filter () следующим образом:
return ($arr['colour']=='Red' || $arr['colour']=='White');
Это отлично работает, если жестко запрограммировано, как указано выше, и фильтрует массив, как и ожидалось, чтобы отображать только товары красного или белого цвета. Однако мне нужно, чтобы это было динамично.
Итак, как я могу построить строку значений, а затем использовать ее в операторе возврата?
Например:
$var = "$arr['colour'] == 'Red' || $arr['colour'] == 'White'";
return ($var);
Это не работает. Я пробовал использовать eval () (все равно не хочу!), Но все равно не сработало.
У меня есть следующий цикл построения строки из массива:
// $value=array of filters e.g colour=Black, colour=Red
$filterparts = explode("=", $value);
$filters[] = '$arr[\'' . $filterparts[0] . '\'] == \'' . $filterparts[1] . '\'';
// Creates array e.g $arr['colour'] = 'Red'
$imploded_filter = implode(" || ", $uniquefilters);
// Creates string, e.g. $arr['colour'] = 'Red' || $arr['colour'] = 'White'
Итак, если я повторю $ imploded_filter, я получу строку извлечения, которую хочу вернуть:
echo $imploded_filter;
// Outputs $arr['colour'] = 'Red' || $arr['colour'] = 'White'
Однако если я это сделаю
return($imploded_filter);
очевидно, что строка не оценивается как жесткий код, так что я могу сделать? Нужно ли мне что-то делать со строкой или возвращать ее другим способом, или создавать код, который мне нужно вернуть, совершенно другим способом?