From dfb377296855a6b704fa840b4c8c43135a90cdf6 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Tue, 24 Sep 2013 16:11:24 +0600 Subject: [PATCH] =?UTF-8?q?Version=202.17:=20+=20Filtration=20of=20all=20c?= =?UTF-8?q?olumns=20is=20now=20available=20(see=20=E2=80=9Cvals=E2=80=9D?= =?UTF-8?q?=20parameter).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ddGetMultipleField.php | 48 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/ddGetMultipleField.php b/ddGetMultipleField.php index 130094d..d4c09e6 100644 --- a/ddGetMultipleField.php +++ b/ddGetMultipleField.php @@ -1,7 +1,7 @@ array('regexp' => '/^\/.*\/[a-z]*$/'))) !== false) ? true : false; $splXisRegexp = (filter_var($splX, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^\/.*\/[a-z]*$/'))) !== false) ? true : false; $num = (!isset($num) || !is_numeric($num)) ? '0' : $num; - $vals = isset($vals) ? explode('||', $vals) : false; + + //Если заданы условия фильтрации + if (!empty($vals)){ + //Разбиваем по условиям + $temp = explode('||', $vals); + + $vals = array(); + + foreach ($temp as $val){ + //Разбиваем по колонке/значению + $val = explode('::', $val); + + //Если указали просто значение (значит, это нулевая колонка) + if (count($val) < 2){ + $val[1] = $val[0]; + $val[0] = '0'; + } + + //Если ни одно правило для этой колонки ещй не задано + if (!isset($vals[$val[0]])){ + $vals[$val[0]] = array(); + } + + //Добавляем правило для соответствующей колонки + $vals[$val[0]][] = $val[1]; + } + }else{ + $vals = false; + } + $count = (!isset($count) || !is_numeric($count)) ? 'all' : $count; $colNum = isset($colNum) ? explode(',', $colNum) : 'all'; //Хитро-мудро для array_intersect_key @@ -82,8 +111,15 @@ //Если необходимо получить какие-то конкретные значения if ($vals){ - //Если текущего значения в списке нет, сносим нафиг - if (!in_array($res[$key][0], $vals)) unset($res[$key]); + //Перебираем колонки для фильтрации + foreach ($vals as $col_k => $col_v){ + //Если текущего значения в списке нет, сносим нафиг + if (!in_array($res[$key][$col_k], $col_v)){ + unset($res[$key]); + //Уходим (строку уже снесли, больше ничего не важно) + break; + } + } } //Если нужно получить какую-то конкретную колонку (также проверяем на то, что строка вообще существует, т.к. она могла быть уже удалена ранее)