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
|
* retourner le tableau $array en "renommant" les clés selon le tableau
|
||||||
* $mappings qui contient des associations de la forme [$from => $to]
|
* $mappings qui contient des associations de la forme [$from => $to]
|
||||||
|
Loading…
Reference in New Issue
Block a user