jbizzay/php-dot

具有点符号的结构化数组辅助工具

v0.5 2018-04-19 03:58 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:54:52 UTC


README

此仓库未维护。如果您需要类似的功能,请查看此链接: https://github.com/adbario/php-dot-notation

帮助管理PHP中的数组,支持点符号。对配置、元数据或处理大型关联数组非常有用。

通常,处理大型数组既繁琐又容易出错。需要深入多个数组的层级,并检查isset,这并不愉快。

if (isset($data['level1']) && isset($data['level1']['level2'])) {
    $value = $data['level1']['level2']['key'];
} else {
    $value = null;
}

相反,您可以这样做

$dot = new Dot($data);
$value = $dot->get('level1.level2.key');

如果点路径的任何部分不存在,它将简单地返回null,而不是抛出未定义索引错误。使用点符号工作使代码更易于阅读和编写。

用法

创建点

use Jbizzay\Dot;

// Create empty dot
$dot = new Dot;

// Or, initialize with an array of data
$data = [
  'stats' => [
    'web' => [
      'hits' => 99
    ],
    'mobile' => [

    ]
  ]
];

$dot = new Dot($data);

获取

如果没有参数,获取将返回整个数据数组。传递点符号字符串以访问数据数组的部分。

$dot->get(); // Returns full data array

$dot->get('stats.web.hits'); // Returns 99

$dot->get('stats.mobile.hits'); // Returns null

$dot->get('some.random.undefined.key'); // Returns null

 

设置

您可以设置任何数据类型,包括可调用的函数。如果不存在任何级别,将创建关联数组。设置返回相同的Dot实例,允许方法链式调用。使用可调用类型将接收当前设置的值(如果存在)作为参数。

$dot
  ->set('stats.web.last_updated', new DateTime)
  ->set('stats.web.allow_tracking', true)
  ->set('stats.web.hits', function ($hits) {
    $hits++;
    return $hits;
  });

$dot->get('stats.web');

/* Returns:
Array
(
    [hits] => 100
    [last_updated] => DateTime Object
        (
            [date] => 2017-07-21 14:50:34.000000
            [timezone_type] => 3
            [timezone] => America/Los_Angeles
        )

    [allow_tracking] => 1
)
*/

取消设置

取消设置一个值,返回点实例

$dot
  ->unset('path.to.value')
  ->unset('some.other.value');

存在

确定键是否已设置

$dot->has('stats.web'); // true
$dot->has('some.random.key'); // false

定义

获取值,但如果键未设置,则使用值初始化键。您还可以使用可调用类型。默认情况下,使用数组初始化。返回点路径值

$dot->define('leads.emails'); // Sets to an array
$hits = $dot->define('stats.mobile.hits', 0);
$dot->define('stats.console.hits', function () {
  // This function is called if this key is not set yet
  return 0;
});

合并

递归地将数组合并到点数组中。第一个参数可以是点路径、数组或返回数组的函数。第二个参数可以是数组或函数,但应仅在第一个参数是键的情况下使用。返回点实例

// Merge into whole data array
$dot->merge([
  'stats' => [
    'web' => [
      'hits' => 123, 
      'leads' => 321
    ]
  ]
]);

$dot->get();

/* Returns:
Array
(
  [stats] => Array
    (
      [web] => Array
        (
          [hits] => 123
          [last_updated] => DateTime Object
            (
              [date] => 2017-07-25 13:34:49.000000
              [timezone_type] => 3
              [timezone] => America/Los_Angeles
            )

          [allow_tracking] => 1
          [leads] => 321
        )

      [mobile] => Array
        (
        )

    )
)
*/

// Merge array into a dot path
$dot->merge('stats.mobile', [
  'issues' => 33
]);

// Merge using function
$dot->merge('stats.mobile', function ($mobile) {
  return ['updated' => new DateTime];
});

// Merge into whole data array with function
$dot->merge(function ($data) {
  return ['new' => 123];
});