gestions conditions

This commit is contained in:
Jephté Clain 2025-02-20 16:53:48 +04:00
parent bc059ee4c9
commit 88a94b044e

48
php/src/db/conds.php Normal file
View File

@ -0,0 +1,48 @@
<?php
namespace nulib\db;
/**
* Class conds: classe outil pour gérer les conditions
*/
class conds {
/**
* retourner une condition "equals" ou "like" en fonction de l'argument:
* - si $value contient "%" ou "*", retourner ["like", $value]
* - sinon retourner ["=", $value]
*/
static function eq_or_like($value) {
if ($value === false || $value === null) return $value;
if (preg_match('/[*%]/', $value)) {
$value = str_replace('*', '%', $value);
return ["like", $value];
} else {
return ["=", $value];
}
}
# nb de caractères minimum pour une recherche approximative
const LIKE_THRESHOLD = 2;
/**
* retourner une condition "like" si la valeur s'y prête
*
* - si la valeur fait moins de $likeThreshold caractères, faire une recherche
* exacte en retournant ["=", $value]
*
*
* - les espaces sont remplacés par %
*
* si $partial
*/
static function like($value, bool $partial=false, ?int $likeThreshold=null) {
if ($value === false || $value === null) return $value;
if ($likeThreshold === null) $likeThreshold = static::LIKE_THRESHOLD;
if (strlen($value) < $likeThreshold) return ["=", $value];
if ($partial) {
// Rajouter un espace qui sera remplacé par % s'il n'y en a pas déjà
if (!preg_match('/[- %]$/', $value)) $value .= " ";
}
$value = preg_replace('/[- ]+/', '%', $value);
return ["like", $value];
}
}