<?php/**
* Created by PhpStorm.
* User: ZHOUZ
* Date: 14-5-25
* Time: 下午5:32
*/namespace Snail\Component;/**
* 多維數(shù)組節(jié)點讀寫
* Class Node
*@package Snail\Component
*/class Node extends AComponent{ /**
* 多維數(shù)組節(jié)點分隔符
*@var string
*/ const SP = '.';
/**
* 將非字符串類型數(shù)據(jù)生成字符串節(jié)點
* <code>
* Node::create(array('a', 'b', 1, true)) => 'a.b.1.1'
* Node::create('a', 'b', null, false) => 'a.b'
* </code>
*@param mixed $nodes 支持?jǐn)?shù)組、任意參數(shù)個數(shù)
*@return string
*/
public static function create($nodes)
{
! is_array($nodes) && $nodes = func_get_args();
return join(static::SP, array_filter(array_map('strval', $nodes)));
}
/**
* 獲取多維數(shù)組節(jié)點轉(zhuǎn)化為數(shù)組鍵名
*@param string $node
*@return array
*/
public static function explode($node)
{
return explode(static::SP, $node);
}
/**
* 設(shè)置多維數(shù)組節(jié)點值
* 注意:
* 由于 PHP 數(shù)組數(shù)值鍵名長度只支持 int 的最大長度分瘾,
* 為避免出現(xiàn)覆蓋等混亂現(xiàn)象胎围,所有節(jié)點在轉(zhuǎn)化為鍵名時都將
* 強制被轉(zhuǎn)換為字符串類型
*@param array & $arr 引用被操作數(shù)組的內(nèi)存地址
*@param string $node 節(jié)點路徑, 如: a.b.c => $arr['a']['b']['c'];
*@param mixed $value
*@return void
*/ public static function set(array & $arr, $node, $value = null) { $arr = $arr2 = (array) $arr;
$keys = static::explode($node);
foreach ($keys as $key) {
$key = strval($key);
if (isset($arr[$key])) {
$arr = & $arr[$key];
} else {
$arr[$key] = array();
$arr = & $arr[$key];
}
}
$arr = $value;
}
/**
* 獲取多維數(shù)組指定節(jié)點值
*@param array & $arr 引用被操作數(shù)組的內(nèi)存地址
*@param string $node 節(jié)點路徑, 如: a.b.c => $arr['a']['b']['c'];
*@param null|mixed $default 若節(jié)點不存在時返回該默認(rèn)值
*@return mixed
*/ public static function get(array & $arr, $node, $default = null) { if (empty($arr)) return $default;
$keys = static::explode($node);
foreach ($keys as $key) {
$key = strval($key);
if (isset($arr[$key])) {
$arr = & $arr[$key];
} else {
return $default;
}
}
return $arr;
}
/**
* 將第二個多維數(shù)組覆蓋或添加到第一個多維數(shù)組進(jìn)行合并
*@param array & $arraySrc 引用被更新的數(shù)組
*@param array & $arrayReplace 引用需要合并的數(shù)據(jù)
*@return void 地址操作無返回值
*/ public static function merge(array & $arraySrc, array & $arrayReplace) { if (empty($arrayReplace)) return;
foreach ($arrayReplace as $k=>& $v) {
if (is_array($v) && isset($arraySrc[$k])) {
static::merge($arraySrc[$k], $v);
} else {
$arraySrc[$k] = $v;
}
}
}
/**
* 判斷多維數(shù)組中是否存在指定節(jié)點,
* 結(jié)果同 isset 關(guān)鍵字 (若存在鍵但值為 NULL 則也會返回 false)
*@param array & $arr 引用原數(shù)組
*@param string $node
*@return bool
*/ public static function has(array & $arr, $node) { if (empty($arr)) return false;
$keys = static::explode($node);
foreach ($keys as $key) {
$key = strval($key);
if (isset($arr[$key])) {
$arr = & $arr[$key];
} else {
return false;
}
}
return true;
}
/**
* 判斷多維數(shù)組中是否存在指定鍵
*@param array & $arr 引用原數(shù)組
*@param string $node
*@return bool
*/ public static function hasKey(array & $arr, $node) { if (empty($arr)) return false;
$keys = static::explode($node);
foreach ($keys as $key) {
$key = strval($key);
if (array_key_exists($key, $arr)) {
$arr = & $arr[$key];
} else {
return false;
}
}
return true;
}
/**
* 注銷數(shù)組中的指定節(jié)點元素
*@param array $arr
*@param string $node
*@return void
*/ public static function clear(array & $arr, $node) { if (empty($arr)) return;
$keys = static::explode($node);
foreach ($keys as $key) {
$key = strval($key);
if (isset($arr[$key])) {
$arr = & $arr[$key];
} else {
return; // 指定節(jié)點不存在亦認(rèn)為是成功 }
}
$arr = null;
unset($arr);
}
}
網(wǎng)上copy一個數(shù)組操作類
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捆等,“玉大人滞造,你說我怎么就攤上這事《翱荆” “怎么了谒养?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長明郭。 經(jīng)常有香客問我买窟,道長,這世上最難降的妖魔是什么薯定? 我笑而不...
- 正文 為了忘掉前任始绍,我火速辦了婚禮,結(jié)果婚禮上话侄,老公的妹妹穿的比我還像新娘亏推。我一直安慰自己,他們只是感情好年堆,可當(dāng)我...
- 文/花漫 我一把揭開白布吞杭。 她就那樣靜靜地躺著,像睡著了一般变丧。 火紅的嫁衣襯著肌膚如雪芽狗。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼捕透,長吁一口氣:“原來是場噩夢啊……” “哼聪姿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乙嘀,我...
- 正文 年R本政府宣布,位于F島的核電站纤垂,受9級特大地震影響矾策,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峭沦,卻給世界環(huán)境...
- 文/蒙蒙 一贾虽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吼鱼,春花似錦蓬豁、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巷送,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矛辕,已是汗流浹背笑跛。 一陣腳步聲響...