<?php

$GET = [
	'pay' => 0,
	'card' => 1,
	'test' => false,
];

$arr = [
	0 => (object)['pay' => 1],
	1 => (object)['card' => 1],
	2 => (object)['pay' => 0],
	3 => (object)['card' => 0],
	4 => (object)['card' => 0, 'pay' => 1],
	5 => (object)['card' => 1, 'pay' => 1],
	6 => (object)['card' => 0, 'pay' => 0],
	7 => (object)['card' => 1, 'pay' => 0],
];

$allowedFilter = [
	'pay',
	'card',
];
$allowedValues = [0, 1];

foreach ($arr as $index => $item) {
	$allFilter = true;

	foreach ($allowedFilter as $key) {
		if (!isset($GET[$key]) || !in_array($GET[$key], $allowedValues)) {
			//Нет фильтра, либо значение неправильно. Игнорируем фильтр
			continue;
		}

		if (empty($GET[$key]) && empty($item->$key)) {
			//Фильтр неактивный, значение тоже должно быть неактивно, для принятия
		} elseif (!empty($GET[$key]) && !empty($item->$key)) {
			//Фильтр активный, значение тоже должно быть активно, для принятия
		} else {
			//Фильтр отличается от значения, охрана отмена =)
			$allFilter &= false;
		}
	}

	if ($allFilter) {
		echo "Все фильтры совпали в позиции #{$index}\n";
	}
}
