Position actuelle: Accueil> Derniers articles> Analyse de la raison pour laquelle les attributs d'objet n'ont pas été extraits à l'aide de Array_Column

Analyse de la raison pour laquelle les attributs d'objet n'ont pas été extraits à l'aide de Array_Column

M66 2025-04-28

Dans PHP, la fonction Array_Column est utilisée pour extraire les données d'une colonne spécifiée à partir d'un tableau multidimensionnel. En règle générale, il est utilisé pour extraire un certain champ ou valeur de chaque élément enfant dans un tableau. Cette fonction fonctionne bien lorsque nous traitons des tableaux simples, mais nous pouvons rencontrer des problèmes lorsque nous essayons d'extraire les propriétés d'objets. Cet article analysera ces problèmes en détail et leurs solutions.

1. Problèmes de compatibilité entre Array_Column et objets

La fonction Array_Column est conçue sur la base des tableaux, pas des objets. Pour les tableaux associatifs simples, Array_Column fonctionne bien, mais pour les tableaux contenant des objets, il ne peut pas extraire directement les propriétés de l'objet par défaut. En effet, Array_Column nécessite une clé ou un champ du tableau pour extraire, mais l'objet n'a pas de structure de valeur clé comme un tableau.

Exemple: situation d'échec

Supposons que nous ayons un tableau d'objets et que nous voulions extraire l'attribut de nom de chaque objet:

 <?php
class Person {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$people = [
    new Person('Alice', 30),
    new Person('Bob', 25),
    new Person('Charlie', 35)
];

$names = array_column($people, 'name');  // Il échouera ici
print_r($names);
?>

Sortir:

 Warning: array_column() expects parameter 1 to be array, object given in ...

Comme indiqué ci-dessus, Array_Column rapporte une erreur, ce qui a suscité un tableau attendu, mais un tableau d'objets est passé. En effet, Array_Column ne prend pas en charge l'extraction des propriétés d'objets.

2. Comment résoudre ce problème?

Il existe de nombreuses façons de résoudre ce problème. Voici deux méthodes courantes:

Schéma 1: convertir les objets en tableau

Tout d'abord, nous pouvons convertir un tableau d'objets en un tableau associatif. Vous pouvez rapidement convertir JSON_DECODE et JSON_ENCODODE , ou utiliser la fonction get_object_vars pour convertir des objets en tableaux.

 $peopleArray = array_map(function($person) {
    return get_object_vars($person);  // Convertir les objets en tableaux
}, $people);

$names = array_column($peopleArray, 'name');
print_r($names);

Sortir:

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

Cette méthode convertit chaque objet en un tableau, puis vous pouvez utiliser Array_Column pour extraire les propriétés normalement.

Solution 2: Utilisez des fonctions Array_map et Anonymous

Si vous ne souhaitez pas convertir tout d'abord la table d'objets en un tableau associatif, vous pouvez utiliser array_map pour extraire manuellement les propriétés de chaque objet:

 $names = array_map(function($person) {
    return $person->name;  // Accès direct aux propriétés de l&#39;objet
}, $people);

print_r($names);

Sortir:

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

Cette méthode manipule directement les objets et extrait les propriétés, en évitant le processus de convertissement en tableaux.

3. Résumé

Dans PHP, Array_Column est une fonction très pratique pour extraire les colonnes spécifiées des tableaux multidimensionnels. Cependant, lorsque nous essayons d'extraire les propriétés à partir d'un tableau d'objets, Array_Column ne fonctionne pas directement, car il ne prend en charge que les opérations basées sur Array. Nous pouvons résoudre ce problème en convertissant des objets en tableaux ou en utilisant array_map avec des fonctions anonymes.

J'espère que cet article peut vous aider à mieux comprendre et utiliser Array_Column tout en évitant les erreurs lors du traitement des objets.