相关文章推荐
冷冷的春卷  ·  U27P2C 27" IPS ...·  2 月前    · 
闷骚的蛋挞  ·  学术交流 | ...·  3 月前    · 

从对象数组中无痛提取一列属性

当你拥有一个由对象组成的数组时,有时你需要提取其中一列属性。例如,假设你有一个猫咪对象数组,每个对象都包含一个 id 属性,你想提取所有猫咪的 id 值。

使用 array_map 函数可以轻松完成此任务。 array_map 将一个回调函数应用于数组中的每个元素,并返回一个包含结果的新数组。回调函数接收一个数组元素作为参数,并返回一个值。

要提取猫咪对象的 id 值,我们可以使用以下回调函数:

$callback = function ($cat) {
    return $cat->id;

然后,我们可以将此回调函数传递给 array_map 函数,如下所示:

$catIds = array_map($callback, $cats);

这将返回一个包含所有猫咪 id 值的新数组。

假设我们有一个猫咪对象数组:

$cats = [
    (object)[
        'id' => 15,
    (object)[
        'id' => 18,
    (object)[
        'id' => 23,

我们可以使用以下代码提取所有猫咪的 id 值:

$callback = function ($cat) {
    return $cat->id;
$catIds = array_map($callback, $cats);
print_r($catIds);

这将输出以下结果:

Array
    [0] => 15
    [1] => 18
    [2] => 23

请注意,该解决方案假设每个猫咪对象都包含一个 id 属性。如果你不确定,可以使用 array_filter 函数先过滤掉任何缺少 id 属性的对象:

$validCats = array_filter($cats, function ($cat) {
    return isset($cat->id);
$catIds = array_map($callback, $validCats);

使用 array_map 函数,你可以轻松地从对象数组中提取一列属性。这对于各种数据处理任务非常有用,例如聚合、过滤和排序。

常见问题解答

  • 我可以使用 array_column 函数吗?
  • 如果你使用的是 PHP 5.5 或更高版本,array_column 函数是提取数组中特定列的更便捷方法。
  • 如果我的回调函数需要多个参数怎么办?
  • array_map 函数允许你传递多个回调参数。例如,以下回调函数接受两个参数:猫咪对象和键值:
  • $callback = function ($cat, $key) {
        return $key . ": " . $cat->id;
    
  • 如何提取嵌套对象的属性?
  • 如果你需要提取嵌套对象的属性,可以使用点运算符。例如,以下回调函数提取猫咪对象的 name 属性:
  • $callback = function ($cat) {
        return $cat->owner->name;
    
  • 如何提取多个属性?
  • 如果你需要提取多个属性,可以使用多个回调函数。例如,以下代码提取猫咪对象的 idname 属性:
  • $callbacks = [
        function ($cat) {
            return $cat->id;
        function ($cat) {
            return $cat->name;
    $catData = array_map($callbacks, $cats);
    
  • 是否可以使用其他方法来提取一列属性?
  • 除了 array_maparray_column 之外,还有一些其他方法可以从数组中提取一列属性。例如,你可以使用循环或使用第三方库。
  • 保护您的网站免受爬虫侵袭:Java Spring Boot中的爬虫防护指南 手把手教你解决SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成的烦恼:与@Tag和@Operation标签失效说再见 SpringBoot项目在Idea中启动报错问题及解决方案大全 强强联手、优势互补:Spring Boot 与 Flink CDC 携手实现 MySQL 数据同步到 Elasticsearch
    强强联手、优势互补:Spring Boot 与 Flink CDC 携手实现 MySQL 数据同步到 Elasticsearch

    © ByteZoneX. 2023 Kyle. All rights reserved.