Current Location: Home> Latest Articles> Analysis of the reason why the object attributes failed to be extracted using array_column

Analysis of the reason why the object attributes failed to be extracted using array_column

M66 2025-04-28

Why does using array_column to extract object properties fail? Analysis of FAQs and Solutions

In PHP, the array_column function is used to extract data from a specified column from a multidimensional array. Typically, it is used to extract a certain field or value of each child element in an array. This function works well when dealing with simple arrays, but we may encounter some problems when we try to extract object properties. This article will analyze these problems in detail and their solutions.

1. Compatibility issues between array_column and objects

The array_column function is designed based on arrays, not objects. For simple associative arrays, array_column works fine, but for arrays containing objects, it cannot directly extract the properties of the object by default. This is because array_column requires a key or field of the array to extract, but the object does not have a key-value structure like an array.

Example: Failure situation

Suppose we have an array of objects and want to extract the name attribute of each object:

 <?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');  // It will fail here
print_r($names);
?>

Output:

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

As shown above, array_column reports an error, prompting that an array is expected, but an array of objects is passed in. This is because array_column does not support extraction of object properties.

2. How to solve this problem?

There are many ways to solve this problem. Here are two common methods:

Scheme 1: Convert objects to array

First, we can convert an array of objects into an associative array. You can quickly convert json_decode and json_encode , or use the get_object_vars function to convert objects into arrays.

 $peopleArray = array_map(function($person) {
    return get_object_vars($person);  // Convert objects to arrays
}, $people);

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

Output:

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

This method converts each object into an array, and then you can use array_column to extract the properties normally.

Solution 2: Use array_map and anonymous functions

If you don't want to convert the entire array of objects into an associative array first, you can use array_map to manually extract the properties of each object:

 $names = array_map(function($person) {
    return $person->name;  // Direct access to the object&#39;s properties
}, $people);

print_r($names);

Output:

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

This method directly manipulates objects and extracts properties, avoiding the process of converting them to arrays.

3. Summary

In PHP, array_column is a very convenient function for extracting specified columns from multidimensional arrays. However, when we try to extract properties from an array of objects, array_column does not work directly, as it only supports array-based operations. We can solve this problem by converting objects into arrays or using array_map with anonymous functions.

I hope this article can help you better understand and use array_column while avoiding errors when processing objects.