ajout cl::split_assoc
This commit is contained in:
parent
96e046d5bf
commit
5652d38073
@ -923,4 +923,48 @@ class cl {
|
||||
A::usort($array, $keys, $assoc);
|
||||
return $array;
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
|
||||
/**
|
||||
* Extraire d'un tableau les clés séquentielles et les clés associatives
|
||||
*
|
||||
* Retourner une liste [$list, $assoc] où $list est un tableau avec uniquement
|
||||
* les valeurs des clés séquentielles et $assoc est un tableau avec uniquement
|
||||
* les valeurs des clés associatives. S'il n'existe aucune clé séquentielle
|
||||
* (resp. aucune clé associative), $list (resp. $assoc) vaut null.
|
||||
*
|
||||
* Par exemple: split_assoc(["a", "b" => "c"]) retourne [["a"], ["b" => "c"]]
|
||||
*/
|
||||
static final function split_assoc(?array $array): array {
|
||||
$list = null;
|
||||
$assoc = null;
|
||||
if ($array !== null) {
|
||||
$i = 0;
|
||||
foreach ($array as $key => $value) {
|
||||
if ($key === $i) {
|
||||
$list[] = $value;
|
||||
$i++;
|
||||
} else {
|
||||
$assoc[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return [$list, $assoc];
|
||||
}
|
||||
|
||||
/**
|
||||
* Joindre en un seul tableau un tableau avec des clés séquentielles et un
|
||||
* tableau avec des clés associatives.
|
||||
*
|
||||
* Si $list_first==true, les clés séquentielles arrivent d'abord, ensuite les
|
||||
* clés associatives. Sinon, ce sont les clés associatives qui arrivent d'abord
|
||||
*/
|
||||
static final function merge_assoc(?array &$array, ?array $list, ?array $assoc, bool $list_first=false): void {
|
||||
if ($list === null && $assoc === null) $array = [];
|
||||
elseif ($list === null) $array = $assoc;
|
||||
elseif ($assoc === null) $array = $list;
|
||||
elseif ($list_first) $array = array_merge($list, $assoc);
|
||||
else $array = array_merge($assoc, $list);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user