-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathArraySearch.php
More file actions
79 lines (75 loc) · 2.34 KB
/
ArraySearch.php
File metadata and controls
79 lines (75 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
namespace serhatozles\arraysearch;
/**
*
* Yii2 ArraySearch
*
* Created for do to search inside of array.
* if you do $all is 1, all results will return to array
*
* Author: serhatozles
* Mail: serhatozles@gmail.com
*
* Örnek: \serhatozles\arraysearch\ArraySearch::q( array $dizi, string "key1 = 'bunaesitolmali1' and key2 >= 'bundanbuyukolmali' or key3 != 'bunaesitolmasin3'", int $all = 0 );
*
*/
class ArraySearch extends \yii\helpers\Inflector {
static function q($SearchArray, $query, $all = 0, $Return = 'direct') {
$SearchArray = json_decode(json_encode($SearchArray), true);
$ResultArray = array();
if (is_array($SearchArray)) {
$desen = "@[\s*]?[\'{1}]?([a-zA-Z\ç\Ç\ö\Ö\ş\Ş\ı\İ\ğ\Ğ\ü\Ü[:space:]0-9-_:;]*)[\'{1}]?[\s*]?(\<\=|\>\=|\=|\!\=|\<|\>)\s*\'([a-zA-Z\ç\Ç\ö\Ö\ş\Ş\ı\İ\ğ\Ğ\ü\Ü[:space:]0-9-_:;]*)\'[\s*]?(and|or|\&\&|\|\|)?@si";
$DonenSonuc = preg_match_all($desen, $query, $Result);
if ($DonenSonuc) {
foreach ($SearchArray as $i => $ArrayElement) {
$SearchStatus = 0;
$EvalString = "";
for ($r = 0; $r < count($Result[1]); $r++):
if ($Result[2][$r] == '=') {
$Operator = "==";
} elseif ($Result[2][$r] == '!=') {
$Operator = "!=";
} elseif ($Result[2][$r] == '>=') {
$Operator = ">=";
} elseif ($Result[2][$r] == '<=') {
$Operator = "<=";
} elseif ($Result[2][$r] == '>') {
$Operator = ">";
} elseif ($Result[2][$r] == '<') {
$Operator = "<";
} else {
$Operator = "==";
}
$AndOperator = "";
if ($r != count($Result[1]) - 1) {
$AndOperator = $Result[4][$r]? : 'and';
}
$EvalString .= '("' . $ArrayElement[$Result[1][$r]] . '"' . $Operator . '"' . $Result[3][$r] . '") ' . $AndOperator . ' ';
endfor;
eval('if( ' . $EvalString . ' ) $SearchStatus = 1;');
if ($SearchStatus === 1) {
if ($all === 1) {
if ($Return == 'direct') :
$ResultArray[] = $ArrayElement;
elseif ($Return == 'array') :
$ResultArray['index'][] = $i;
$ResultArray['array'][] = $ArrayElement;
endif;
} else {
if ($Return == 'direct') :
$ResultArray = $i;
elseif ($Return == 'array') :
$ResultArray['index'] = $i;
endif;
return $ResultArray;
}
}
}
if ($all === 1) {
return $ResultArray;
}
}
}
return false;
}
}