array_column() - 从数组中取出一段

一、从数组中取出一段

array_column()
参数 必须 示例

需要取出数组列的多维数组


如果提供的是包含一组对象的数组,

只有 public 属性会被直接取出。


为了也能取出 private 和 protected 属性,

类必须实现__get() 和 __isset() 魔术方法。

$arr = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);

需要返回值的列


可以是索引数组的列索引,

或者是关联数组的列的键,

也可以是属性名。 


也可以是NULL,

此时将返回整个数组

(配合 参数3 来重置数组键的时候,非常管用)

first_name

作为返回数组的索引/键的列,

它可以是该列的整数索引,

或者字符串键值。

id
返回值 错误 / 异常 注意事项
从多维数组中返回单列数组。 当使用第三个参数时,
要注意第三个参数值的唯一性,
如果第三个参数值不唯一,
获取到的结果会少
例子1:取出first names列
// 从数据库返回的可能记录集的数组
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);
 
$first_names = array_column($records, 'first_name');
print_r($first_names);
返回结果:
Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)
例子2:取出last names列,用相应的id作为键值
返回结果:
Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)
// 从数据库返回的可能记录集的数组
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);
 
$first_names = array_column($records, 'first_name', 'id');
print_r($first_names);
返回结果:
Array
(
    [2135] => John
    [3245] => Sally
    [5342] => Peter
)
当$records[2]['id'] == $records[3]['id']时,在使用第三个参数,返回结果就少了Jane这个值
故如想使用第三个参数,请确保唯一性

例子3:username 列是从对象获取 public 的 "username" 属性
username = $username;
    }
}

$users = [
    new User('user 1'),
    new User('user 2'),
    new User('user 3'),
];

print_r(array_column($users, 'username'));
返回结果:
Array
(
    [0] => user 1
    [1] => user 2
    [2] => user 3
)
例子4:获取 username 列,从对象通过魔术方法 __get() 获取 private 的 "username" 属性。
name = $name;
    }

    public function __get($prop)
    {
        return $this->$prop;
    }

    public function __isset($prop) : bool
    {
        return isset($this->$prop);
    }
}

$people = [
    new Person('Fred'),
    new Person('Jane'),
    new Person('John'),
];

print_r(array_column($people, 'name'));
返回结果:
Array
(
    [0] => Fred
    [1] => Jane
    [2] => John
)
如果不提供__isset(),会返回空数组


你可能感兴趣的:(GavinLau,-,php数组函数)