Position actuelle: Accueil> Derniers articles> Pourquoi Array_slice est-il un résultat vide? Analyse de cause commune

Pourquoi Array_slice est-il un résultat vide? Analyse de cause commune

gitbox 2025-05-27

En PHP, la fonction Array_Slice est souvent utilisée pour extraire une partie de l'élément d'un tableau, mais parfois vous pouvez constater qu'il renvoie un tableau vide, ce qui est déroutant. Cet article explorera en profondeur les raisons courantes pour lesquelles Array_Slice renvoie des tableaux vides et fournira des solutions correspondantes pour vous aider à localiser et à résoudre rapidement les problèmes.


1. Le décalage de départ dépasse la longueur du tableau

Le deuxième paramètre de Array_Slice est le décalage de départ. Si cette valeur est supérieure ou égale à la longueur du tableau, le résultat de retour doit être un tableau vide.

 <?php
$arr = [1, 2, 3, 4, 5];
$result = array_slice($arr, 10); // La longueur du tableau est uniquement5,Compenser10Hors de portée
var_dump($result); // array(0) { }
?>

Solution: assurez-vous que le décalage se situe dans une plage raisonnable et utilisez la fonction Count () pour juger la longueur du tableau.

 <?php
$offset = 10;
if ($offset < count($arr)) {
    $result = array_slice($arr, $offset);
} else {
    $result = []; // Compenser超出,Attribuer manuellement un tableau vide ou un autre traitement
}
?>

2. Le paramètre de longueur est nul ou négatif et hors de portée

La troisième longueur de paramètre représente le nombre d'éléments à extraire. Si la longueur spécifiée est 0, Array_Slice renvoie un tableau vide. De plus, la longueur du nombre négatif indique le nombre d'éléments exclus de la fin du tableau, mais si la valeur absolue de la longueur du nombre négatif est trop grande, cela peut également conduire au retour d'un réseau vide.

 <?php
$arr = [1, 2, 3, 4, 5];
var_dump(array_slice($arr, 2, 0));    // Tableau vide
var_dump(array_slice($arr, 2, -10));  // Tableau vide,La longueur négative dépasse la plage
?>

Solution: assurez-vous que le paramètre de longueur est raisonnable, ou omettez-le directement et laissez la fonction renvoyer tous les éléments à partir du décalage.


3. La variable d'origine n'est pas un tableau ou un tableau vide

array_slice ne peut fonctionner que des tableaux. Si la variable transmise n'est pas un tableau ou si le tableau lui-même est vide, le résultat renvoyé sera un tableau vide.

 <?php
$notArray = null;
var_dump(array_slice($notArray, 0)); // 报错或Tableau vide

$emptyArray = [];
var_dump(array_slice($emptyArray, 0)); // Tableau vide
?>

Solution: vérifiez si la variable est un tableau et n'est pas vide avant d'appeler.

 <?php
if (is_array($arr) && !empty($arr)) {
    $result = array_slice($arr, 0);
} else {
    $result = [];
}
?>

4. Notes lorsque vous utilisez des tableaux associatifs

Array_slice conserve le nom de clé d'origine lors du traitement des tableaux associatifs, mais si vous ignorez le nom de clé lorsque vous effectuez certaines opérations sur le résultat, cela peut conduire à des résultats inattendus.

 <?php
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
$result = array_slice($arr, 1, 1, true);
var_dump($result); // Arrêt toujours associatif,Nom clé réservé
?>

Si Preserve_Keys est défini sur False , le nom de clé sera réindexé, ce qui ne provoquera généralement pas de tableau vide, mais si l'indice est confus, vous devez également faire attention.


5. Utilisation abusive dans les tableaux multidimensionnels

Array_slice ne peut manipuler que la première couche d'un tableau et ne peut pas extraire directement des éléments plus profonds dans un tableau multidimensionnel. Si une mauvaise utilisation est utilisée, il peut entraîner un retour vide.

 <?php
$arr = [
    ['id' => 1, 'name' => 'Tom'],
    ['id' => 2, 'name' => 'Jerry']
];
$result = array_slice($arr[0], 5, 2); // $arr[0] est un sous-réseau,Longueur insuffisante,返回Tableau vide
?>

Solution: Confirmez d'abord le niveau des tranches qui doivent être tranchées pour garantir que la longueur du tableau répond aux besoins.


6. Résumé des exemples de code

 <?php
$arr = [10, 20, 30, 40, 50];

// Utilisation correcte:Depuis2Commencez à prendre des éléments3autonome
$result = array_slice($arr, 1, 3);
print_r($result); // Sortir: [20, 30, 40]

// Mauvaise utilisation:CompenserHors de portée,返回Tableau vide
$result = array_slice($arr, 10, 3);
print_r($result); // Sortir: []

// Mauvaise utilisation:La longueur est0,返回Tableau vide
$result = array_slice($arr, 1, 0);
print_r($result); // Sortir: []

// Tableau vide输入,返回Tableau vide
$result = array_slice([], 0, 1);
print_r($result); // Sortir: []
?>

Résumer

array_slice renvoie un tableau vide et les raisons courantes comprennent:

  • Le décalage est supérieur ou égal à la longueur du tableau

  • Le paramètre de longueur est de 0 ou une longueur négative est déraisonnable

  • Ce qui est passé n'est pas un tableau ou le tableau est vide

  • Utilisation abusive des tranches de tableaux multidimensionnels

  • Ignorez les noms de clés lorsque vous utilisez des tableaux associatifs

Tant que vous comprenez ces points clés, vous pouvez éviter efficacement le problème de renvoyer Array_Slice un tableau vide. Examinez plus lors de la rédaction de code pour vous assurer que les paramètres sont raisonnables et que le problème sera naturellement résolu.