Dans PHP, array_slice () et array_filter () sont deux fonctions de traitement de la table couramment utilisées. L'un est utilisé pour intercepter une partie d'un tableau, et l'autre est utilisé pour filtrer les éléments du tableau qui correspondent aux critères. Lorsque nous traitons les données, nous devons souvent utiliser ces deux fonctions ensemble. Mais avez-vous pensé à cela:
La réponse est: oui, l'ordre affectera les résultats , et dans certains scénarios, l'impact est très important.
array_filter (array $ array, callable | null $ callback = null): array
Renvoie le tableau filtré par la fonction de rappel. Si la fonction de rappel n'est pas adoptée, PHP supprimera automatiquement tous les éléments avec une valeur de faux (y compris 0 , '' , null , false , etc.).
array_slice (array $ array, int $ offset ,? int $ length = null, bool $ preserve_keys = false): array
Renvoie une gamme de sous-terrains dans le tableau. Prend en charge les décalages négatifs et vous pouvez choisir de conserver la clé d'origine.
Supposons que nous ayons le tableau suivant:
$data = [0, 1, 2, 3, 4, 5];
Nous devons faire ce qui suit:
Filtrez des éléments avec des valeurs supérieures à 2;
Prenez les deux premiers éléments du résultat filtré.
$filtered = array_filter($data, function($item) {
return $item > 2;
});
$result = array_slice($filtered, 0, 2);
print_r($result);
Sortir:
Array
(
[3] => 3
[4] => 4
)
Notez que la sortie ici est de filtrer les éléments supérieurs à 2 (c'est-à-dire 3, 4, 5) du tableau d'origine, puis de prendre les deux premiers. Si vous ne définissez pas Preserve_Keys sur true , Array_slice sera réindexé (le comportement par défaut de le régler sur false ) et la sortie deviendra:
$result = array_slice(array_values($filtered), 0, 2);
Sortir:
Array
(
[0] => 3
[1] => 4
)
$sliced = array_slice($data, 0, 4);
$result = array_filter($sliced, function($item) {
return $item > 2;
});
print_r($result);
Sortir:
Array
(
[3] => 3
)
Ici, nous prenons les 4 premiers éléments (0, 1, 2, 3), puis filtrons les éléments supérieurs à 2, et il n'y a qu'un seul résultat: 3 .
Si vous souhaitez prendre les premiers résultats de tous les éléments qui répondent d'abord aux critères : array_filter , alors array_slice .
Si vous souhaitez filtrer les éléments qui répondent aux critères des premiers éléments du tableau d'origine : array_slice d'abord, alors array_filter .
Ceci est particulièrement critique lors de la pagination, de l'optimisation du flux de données et du traitement de grands ensembles de données.
Supposons que vous ayez une interface API https://gitbox.net/API/Posts , qui renvoie un tableau de messages. Vous souhaitez filtrer les 5 principaux messages avec le mot-clé "PHP" dans le titre:
$response = file_get_contents('https://gitbox.net/api/posts');
$posts = json_decode($response, true);
$filtered = array_filter($posts, function($post) {
return strpos($post['title'], 'PHP') !== false;
});
$topFive = array_slice(array_values($filtered), 0, 5);
print_r($topFive);
L'écriture ceci garantit que vous obtenez vraiment "les cinq premiers de tous les articles contenant PHP".
Inversement, si vous souhaitez filtrer uniquement ceux contenant "PHP" des 10 premiers messages que vous retournez:
$topTen = array_slice($posts, 0, 10);
$filtered = array_filter($topTen, function($post) {
return strpos($post['title'], 'PHP') !== false;
});
print_r($filtered);
Différentes commandes, les résultats peuvent être très différents.
Filtrez d'abord puis intercepter, qui est applicable aux "parties préférées de toutes les données";
Intercepter d'abord puis filtrer, qui convient pour "limiter la partie précédente des données avant le filtrage".
Lorsque vous utilisez la combinaison de Array_Slice et Array_Filter , vous devez clarifier la portée de vos données cibles, afin de déterminer l'ordre et d'éviter les erreurs logiques ou les résultats inattendus.