cryonighter/object-column

此包提供了 object_column() 函数,它的工作方式与标准库中的 array_column() 函数类似,但具有处理对象的能力

1.0.0 2021-05-10 21:36 UTC

This package is not auto-updated.

Last update: 2024-09-25 11:42:04 UTC


README

Latest Version on Packagist Software License Total Downloads

此包提供了 object_column() 函数,其工作方式类似于array_column() 标准库函数,但具有处理对象的能力。

要搜索对象中的列,可以使用这些对象的公共属性以及方法 getColumnName() / hasColumnName() / isColumnName() / columnName()(按此顺序),以及 ArrayAccess 接口的方法。

函数 object_column()array_column() 完全向后兼容,并且可以与常规数组以相同的方式工作。

此外,object_column() 函数支持链式调用。

亮点

  • 简单API
  • 框架无关
  • Composer就绪,符合PSR-2PSR-4

系统需求

你需要

  • PHP >= 7.1.0,但建议使用最新的稳定版本

安装

通过Composer

$ composer require cryonighter/object-column

用法

该函数按以下方式工作

示例 #1:简单访问公共属性
use function Cryonighter\ObjectColumn\object_column;

$objects = [
    new class {
        public $foo = '123';
        public $bar = '456';
        public $baz = '789';
    },
    new class {
        public $foo = 'qwe';
        public $bar = 'asd';
        public $baz = 'zxc';
    },
];

$result = object_column($objects, 'foo', 'bar');
示例 #2:调用getter的链
use function Cryonighter\ObjectColumn\object_column;

$objects = [
    new class {
        public function getFoo() {
            return new class {
                public function baz(): string {
                    return '123';
                }
            };
        }
        public function getBar() {
            return new class {
                public function buz(): string {
                    return '456';
                }
            };
        }
    },
    new class {
        public function getFoo() {
            return new class {
                public function baz(): string {
                    return 'qwe';
                }
            };
        }
        public function getBar() {
            return new class {
                public function buz(): string {
                    return 'asd';
                }
            };
        }
    },
];

$result = object_column($data, 'foo.baz', 'bar.buz');
示例 #3:调用 ArrayAccess 对象的链
use function Cryonighter\ObjectColumn\object_column;

$objects = [
    new ArrayObject([
        'foo' => new ArrayObject(['baz' => '123']),
        'bar' => new ArrayObject(['buz' => '456']),
    ]),
    new ArrayObject([
        'foo' => new ArrayObject(['baz' => 'qwe']),
        'bar' => new ArrayObject(['buz' => 'asd']),
    ]),
];

$result = object_column($data, 'foo.baz', 'bar.buz');
结果

在所有情况下,结果将相同

[456 => '123', 'asd' => 'qwe']

数组索引

此外,该函数还可以用于索引数组,为此只需不传递第一个参数

示例 #4:数组索引
use function Cryonighter\ObjectColumn\object_column;

$objects =  [
    [
        'foo' => ['baz' => '123'],
        'bar' => ['buz' => '456'],
    ],
    [
        'foo' => ['baz' => 'qwe'],
        'bar' => ['buz' => 'asd'],
    ],
];

$result = object_column($data, null, 'bar.buz');
结果
[
    '456' => [
        'foo' => ['baz' => '123'],
        'bar' => ['buz' => '456'],
    ],
    'asd' => [
        'foo' => ['baz' => 'qwe'],
        'bar' => ['buz' => 'asd'],
    ],
];

如果没有传递第二个或第三个参数给函数,将返回原始数组。此操作没有意义。

变更日志

有关最近更改的更多信息,请参阅CHANGELOG

测试

$ php vendor/phpunit/phpunit/phpunit tests

贡献

有关详细信息,请参阅CONTRIBUTINGCODE_OF_CONDUCT

安全

如果您发现任何与安全相关的问题,请通过电子邮件发送至cryonighter@yandex.ru,而不是使用问题跟踪器。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件