Position actuelle: Accueil> Derniers articles> Array_Column est-il plus efficace lors de l'extraction d'objets que FOREACH?

Array_Column est-il plus efficace lors de l'extraction d'objets que FOREACH?

M66 2025-05-11

En PHP, il existe de nombreuses façons de traiter les tableaux, où Array_Column et Forach Loops sont deux méthodes courantes pour extraire des valeurs spécifiques ou des propriétés d'objet dans un tableau. Bien que ces deux méthodes soient souvent utilisées pour implémenter des fonctions similaires, elles diffèrent en performances. Alors, Array_Column est-il plus efficace que FOREACH ? Dans cet article, nous analyserons en détail les différences de performance et les scénarios applicables.

1. Utilisation de base de Array_Column et Foreach

1.1 Utilisez Array_Column pour extraire les propriétés des objets

La fonction Array_Column est une fonction très utile intégrée à PHP, qui extrait les valeurs d'une colonne spécifiée à partir d'un tableau multidimensionnel, adapté à l'extraction de propriétés spécifiques d'un objet à partir d'un tableau d'objets. Par exemple, supposons que nous ayons le tableau suivant d'objets:

 $objects = [
    (object) ['id' => 1, 'name' => 'Alice'],
    (object) ['id' => 2, 'name' => 'Bob'],
    (object) ['id' => 3, 'name' => 'Charlie']
];

// utiliser array_column Extraire tout 'name' propriété
$names = array_column($objects, 'name');
print_r($names);

La sortie sera:

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

Array_Column reçoit deux paramètres, le premier est le tableau, et le second est le nom de champ qui doit être extrait. Son implémentation interne est très efficace, en particulier lors de la gestion de grands tableaux, permettant à des données de colonne d'extraction plus rapidement.

1.2 Utiliser ForEach pour faire boucle pour extraire les propriétés des objets

Une autre façon courante consiste à parcourir manuellement le tableau à l'aide d'une boucle FOREAC et à extraire les valeurs de propriété de chaque objet. Par exemple:

 $objects = [
    (object) ['id' => 1, 'name' => 'Alice'],
    (object) ['id' => 2, 'name' => 'Bob'],
    (object) ['id' => 3, 'name' => 'Charlie']
];

$names = [];
foreach ($objects as $object) {
    $names[] = $object->name;
}
print_r($names);

Le résultat de sortie est le même que Array_Column :

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

La boucle foreach nécessite une logique manuelle pour extraire les valeurs d'attribut de chaque objet. Le code est généralement plus long, mais il a également une bonne flexibilité.

2. Différences de performance

2.1 Avantages de performance de Array_Column

Array_Column est une fonction implémentée en interne en PHP et écrite en C, il est donc généralement plus efficace que FOREACH lorsqu'il s'agit de tableaux à grande échelle. En effet, Array_Column est optimisé pour des scénarios spécifiques. Il extrait directement les colonnes spécifiées dans le tableau en bas et évite les opérations de contrôle de la boucle et d'attribution du tableau au niveau du code PHP.

2.2 Inconvénients de performance des boucles foreach

En revanche, une boucle FOREAK nécessite une traversée manuelle du tableau et traitée une par une. Bien que cette méthode soit flexible, chaque boucle nécessite plusieurs opérations de PHP, telles que les opérations de tableau, le jugement conditionnel, etc. Par conséquent, lorsqu'ils traitent de très grands tableaux, la boucle Foreach peut ne pas fonctionner ainsi que Array_Column .

3. Comparaison spécifique des performances

Supposons que nous ayons un tableau de 10000 objets, nous utiliserons Array_Column et ForEach pour extraire les attributs de nom de l'objet et tester leur temps d'exécution.

 // Créer un conteneur 10000 un tableau d'objets
$objects = [];
for ($i = 0; $i < 10000; $i++) {
    $objects[] = (object) ['id' => $i, 'name' => 'Name ' . $i];
}

// test array_column performance
$startTime = microtime(true);
$names = array_column($objects, 'name');
$endTime = microtime(true);
echo "array_column execution time: " . ($endTime - $startTime) . " seconds\n";

// test foreach 循环performance
$startTime = microtime(true);
$names = [];
foreach ($objects as $object) {
    $names[] = $object->name;
}
$endTime = microtime(true);
echo "foreach execution time: " . ($endTime - $startTime) . " seconds\n";

Dans les tests, Array_Column s'exécutera généralement plus court que Foreach , en particulier lorsque le tableau est plus grand.

4. Conclusion

En PHP, la fonction Array_Column est généralement plus efficace que la boucle FOREACH , en particulier lorsqu'elle est nécessaire d'extraire des colonnes spécifiques à partir de tableaux à grande échelle. Array_Column utilise l'optimisation interne de PHP pour extraire rapidement des données avec des frais généraux plus faibles, tandis que les boucles FOREAK nécessitent plus d'opérations PHP, ce qui entraîne de mauvaises performances.

Cependant, Foreach Loops présente encore certains avantages dans certains scénarios où une logique de personnalisation est requise, en particulier lorsque vous devez effectuer des opérations supplémentaires tout en traversant le tableau. Dans le développement réel, si vous extraire simplement une colonne dans un tableau, il est recommandé d'utiliser Array_Column en premier.

J'espère que cet article peut vous aider à mieux comprendre les différences de performances entre ces deux méthodes et faire des choix plus appropriés.