<?php
class Arr
{
/**
* 數組取值,支持點分割的鍵,爲了避免歧義,數組的鍵不要有`.`
* @param array $data 要取值的數組
* @param string $key 要取的鍵,如果鍵爲null,則返回整個數組
* @param mixed $default 默認值
* @param bool $exists 引用返回鍵是否存在
* @return mixed
*/
public function arrGetter(array $data, $key, $default = null, &$exists = null)
{
if ($key === null) {
return $data;
}
foreach (explode('.', $key) as $k) {
if (is_array($data) && array_key_exists($k, $data)) {
$data = $data[$k];
} else {
$exists = false;
return $default;
}
}
$exists = true;
return $data;
}
/**
* 數組賦值,支持點分割的鍵,爲了避免歧義,數組的鍵不要有`.`
* @param array $data 要賦值的數組
* @param string $key 賦值的鍵,如果爲null,就把整個數組改變爲$value
* @param mixed $value 要設置的值
* @return array 返回最後一維數組
*/
public function arrSetter(array &$data, $key, $value)
{
if ($key === null) {
return $data = $value;
}
$keys = explode('.', $key);
while (count($keys) > 1) {
$key = array_shift($keys);
if (!isset($data[$key]) || !is_array($data[$key])) {
$data[$key] = [];
}
$data = &$data[$key];
}
$data[array_shift($keys)] = $value;
return $data;
}
/**
* 數組刪除某個鍵,爲了避免歧義,數組的鍵不要有`.`
* @param array $data 要操作的數組
* @param string $key 要刪除的鍵
*/
public function arrUnset(array &$data, $key)
{
$keys = explode('.', $key);
while (count($keys) > 1) {
$key = array_shift($keys);
if (isset($data[$key]) && is_array($data[$key])) {
$data = &$data[$key];
} else {
return;
}
}
unset($data[array_shift($keys)]);
}
}
更多資訊請訪問:https://github.com/suyar