ajout cl::same_keys()
This commit is contained in:
parent
5ae3e8b100
commit
9723c146d5
@ -610,6 +610,42 @@ class cl {
|
||||
|
||||
#############################################################################
|
||||
|
||||
/**
|
||||
* tester si $array a en début de tableau les mêmes clés que $ref, et dans le
|
||||
* même ordre. $array peut avoir d'autres clés, ça n'influe pas sur le résultat
|
||||
*
|
||||
* $keys obtient la liste des clés de $ref trouvées, dans l'ordre de $array
|
||||
* $remainKeys obtient la liste des clés de $array qui ne sont pas dans $ref
|
||||
* $missingKeys obtient la liste des clés de $ref qui ne sont pas dans $array
|
||||
*/
|
||||
static function same_keys(?array $array, ?array $ref, ?array &$keys=null, ?array &$remainKeys=null, ?array &$missingKeys=null): bool {
|
||||
$keys = [];
|
||||
$remainKeys = [];
|
||||
$missingKeys = [];
|
||||
if ($array === null || $array === []) {
|
||||
if ($ref === null || $ref === []) return true;
|
||||
$missingKeys = array_keys($ref);
|
||||
return false;
|
||||
} elseif ($ref === null || $ref === []) {
|
||||
$remainKeys = array_keys($array);
|
||||
return true;
|
||||
}
|
||||
$refKeys = array_keys($ref);
|
||||
$refCount = count($ref);
|
||||
$index = 0;
|
||||
$sameKeys = true;
|
||||
foreach (array_keys($array) as $key) {
|
||||
if ($index < $refCount) {
|
||||
if ($key !== $refKeys[$index]) $sameKeys = false;
|
||||
$index++;
|
||||
}
|
||||
if (array_key_exists($key, $ref)) $keys[] = $key;
|
||||
else $remainKeys[] = $key;
|
||||
}
|
||||
$missingKeys = array_values(array_diff($refKeys, $keys));
|
||||
return $sameKeys && $index == $refCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* retourner le tableau $array en "renommant" les clés selon le tableau
|
||||
* $mappings qui contient des associations de la forme [$from => $to]
|
||||
|
Loading…
Reference in New Issue
Block a user