@ 2017-07-03T14:24:39Z <?php
$query_input = [
'_or'=>[
['cats'=>1],
['dogs'=>1]
]
];
$results = [
['id'=>0,'cats'=>0,'dogs'=>0],
['id'=>1,'cats'=>0,'dogs'=>0,'lizards'=>3],
['id'=>2,'cats'=>0,'dogs'=>1],
['id'=>3,'cats'=>1,'dogs'=>0],
['id'=>4,'cats'=>1,'dogs'=>1]
];
// hackkk both the filter and find methods need significant cleanup
if (isset($query_input['_or'])) {
foreach ($query_input['_or'] as $key=>$value) {
$query_where = [$key, '_OR', null];
}
}
$out = [];
$skip = [];
foreach ($results as $result) {
foreach ($query_where as $where) {
list($key, $comp, $value) = $where;
if (!isset($result[$key])) {
$skip = ['!isset', $key];
continue;
} // the data is not in the result, skip check
switch ($comp) {
case '_OR':
foreach ($query_input['_or'][$key] as $or_item) {
foreach ($or_item as $comp_key=>$comp_value) {
if ($result[$comp_key] != $comp_value) {
continue(2);
}
}
break; // as long as the script hits here, the result will be kep
}
break;
case '=':
if ($result[$key] != $value) {
$skip[] = [$result[$key],$value,'=',$key];
continue(3);
}
break;
case 'LIKE':
$pos = strpos($value,'%');
if ($pos===false) $pos = strlen($value);
if (substr($result[$key],0,$pos) !== substr($value,0,$pos)) {
$skip[] = [$result[$key],$value,'LIKE',$key];
continue(3);
}
break;
}
}
}
$out[] = $result;
var_dump($out);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 5.6.0 - 5.6.40 , 7.0.0 - 7.0.33 , 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 array(1) {
[0]=>
array(3) {
["id"]=>
int(4)
["cats"]=>
int(1)
["dogs"]=>
int(1)
}
}
Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
array(1) {
[0]=>
array(3) {
["id"]=>
int(4)
["cats"]=>
int(1)
["dogs"]=>
int(1)
}
}
preferences:dark mode live preview
204.68 ms | 402 KiB | 291 Q