Pendant le développement de PHP, Array_Slice est l'une de nos fonctions de fonctionnement de tableau couramment utilisées. Il est principalement utilisé pour extraire un sous-tableau d'un tableau. Cependant, lorsque nous l'utilisons, il est facile de provoquer des bogues inattendus si nous ne faisons pas attention aux paramètres et aux détails du résultat de retour. Cet article révèlera cette «fosse» avec des exemples pratiques et vous apprendra comment l'éviter correctement.
array_slice (array $ array, int $ offset ,? int $ length = null, bool $ preserve_keys = false): array
$ tableau : le tableau d'origine à utiliser
$ Offset : Démarrer l'emplacement
$ Longueur : la longueur à intercepter
$ Preserve_Keys : s'il faut préserver le nom clé du tableau d'origine (la valeur par défaut est fausse , c'est-à-dire Re-index)
Jetons un coup d'œil à un exemple:
$data = [
'apple' => 1,
'banana' => 2,
'cherry' => 3,
'date' => 4,
];
$result = array_slice($data, 1, 2);
print_r($result);
Pensez-vous que ce qui suit sera sorti?
Array
(
[banana] => 2
[cherry] => 3
)
En fait, la sortie ressemble à ceci:
Array
(
[0] => 2
[1] => 3
)
Pourquoi le nom clé est-il perdu? La raison en est que la valeur par défaut du quatrième paramètre $ Preserve_keys est fausse , donc le nom de la clé est réinitialisé à la clé d'index à partir de 0 .
Spécifiez simplement vrai au quatrième paramètre lors de l'appel Array_slice :
$result = array_slice($data, 1, 2, true);
print_r($result);
La sortie sera comme vous le souhaitez:
Array
(
[banana] => 2
[cherry] => 3
)
Cette étape est essentielle, surtout lorsque vous comptez sur les noms de clés du tableau (tels que la gestion des champs de formulaire, des fichiers de configuration, etc.), l'oubli de ce paramètre peut entraîner une erreur logique complète.
Par exemple, vous utilisez des résultats de tranche pour construire une nouvelle structure de valeur clé:
foreach (array_slice($data, 1, 2) as $key => $val) {
echo "$key => $val\n";
}
Ce que vous attendez de sortir est:
banana => 2
cherry => 3
Mais la sortie réelle est:
0 => 2
1 => 3
Cela peut faire échouer complètement une partie de votre logique de dépendance à valeur clé, surtout lorsque vous utilisez $ key comme une sorte d'identifiant.
Avant d'utiliser Array_Slice , demandez-vous:
Vous souciez-vous des noms clés? (Les noms clés du tableau associatif sont généralement très importants)
Le résultat continuera-t-il à être utilisé pour la logique liée à la clé de tableau d'origine?
Si la réponse est "oui", assurez-vous de définir $ Preserve_Keys = true .
L'encapsulation d'une version plus sûre peut éviter les erreurs répétées:
function slice_assoc(array $array, int $offset, ?int $length = null): array {
return array_slice($array, $offset, $length, true);
}
Puis utilisez:
$result = slice_assoc($data, 1, 2);
Effacer, fiable et sans erreur.
Dans de nombreux CMS et frameworks, Array_Slice est utilisé dans la pagination d'arrière-plan ou le traitement du tableau de configuration. Si la clé n'est pas conservée, elle peut provoquer une confusion et même provoquer des vulnérabilités de vérification de l'autorisation. Par exemple, lorsque vous effectuez des interceptions de pagination pour un certain type d'élément de configuration, si la clé est config_id et est réinitialisée à un index entier, la configuration correspondante ne correspondra pas normalement.
Pour plus de précautions pour l'utilisation des fonctions PHP, veuillez cocher https://gitbox.net/php-tips