<?php
// 例子
$rowList = array();
$rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_1','D'=>'dira/dirb/dirc/node1','E'=>'nodeName1');
$rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_1','D'=>'dira/dirb/dirc/node2','E'=>'nodeName2');
$rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_2','D'=>'dira/dirb/dirc/node3','E'=>'nodeName3');
$rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_2','D'=>'dira/dirb/dirc/node4','E'=>'nodeName4'); $rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_1','D'=>'dira/dirb/dirc/node5','E'=>'nodeName5');
$rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_1','D'=>'dira/dirb/dirc/node6','E'=>'nodeName6');
$rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_2','D'=>'dira/dirb/dirc/node7','E'=>'nodeName7');
$rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_2','D'=>'dira/dirb/dirc/node8','E'=>'nodeName8'); $rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_1','D'=>'dira/dirb/dirc/node9','E'=>'nodeName9');
$rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_1','D'=>'dira/dirb/dirc/node10','E'=>'nodeName10');
$rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_2','D'=>'dira/dirb/dirc/node11','E'=>'nodeName11');
$rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_2','D'=>'dira/dirb/dirc/node12','E'=>'nodeName12'); $rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_1','D'=>'dira/dirb/dirc/node13','E'=>'nodeName13');
$rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_1','D'=>'dira/dirb/dirc/node14','E'=>'nodeName14');
$rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_2','D'=>'dira/dirb/dirc/node15','E'=>'nodeName15');
$rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_2','D'=>'dira/dirb/dirc/node16','E'=>'nodeName16'); // 填值
$nodeTree = array();
foreach ($rowList as $key => $value){
$nodePath = array_pop($value);
$nodeName = array_pop($value);
$path = implode('/childs/', $value);
$nodeInfo = array(
'nodeName'=>$nodeName,
'nodePath'=>$nodePath,
);
PathValueHelper::appendByPath($nodeTree, $path, $nodeInfo);
}
// print_r($nodeTree); // 打印存储结构 // 取值
$path = 'A_1/childs/A_1_2/childs/A_1_2_1';
if(PathValueHelper::issetByPath($nodeTree, $path)){
echo $path." is exist. \n";
print_r(PathValueHelper::getByPath($nodeTree, $path));
}
else{
echo $path." is not exist. \n";
} $path = 'A_1/childs/A_1_2/childs/A_1_2_5';
if(PathValueHelper::issetByPath($nodeTree,$path)){
echo $path.' is exist.';
print_r(PathValueHelper::getByPath($nodeTree,$path));
}
else{
echo $path." is not exist. \n";
} // 删除值
$path = 'A_1/childs/A_1_2/childs/A_1_2_1';
if(PathValueHelper::issetByPath($nodeTree, $path)){
echo $path." is unseted. \n";
PathValueHelper::unsetByPath($nodeTree, $path);
}
else{
echo $path." is not exist. \n";
}
$path = 'A_1/childs/A_1_2/childs/A_1_2_1';
if(PathValueHelper::issetByPath($nodeTree, $path)){
print_r(PathValueHelper::getByPath($nodeTree, $path));
}
else{
echo $path." is not exist. \n";
} print_r($nodeTree); // 打印存储结构 class PathValueHelper { /**
* 追加值
* @param unknown $data 容器变量
* @param unknown $path 路径
* @param unknown $value 值
* @param string $delimiter 路径分隔符
* @return boolean
*/
public static function appendByPath(&$data,$path,$value,$delimiter='/'){
$pathSplit = explode($delimiter, $path);
$dataTemp = &$data;
foreach ($pathSplit as $keyName){
if(isset($dataTemp[$keyName])){
$dataTemp = &$dataTemp[$keyName];
continue;
}
else{
$dataTemp[$keyName] = array();
$dataTemp = &$dataTemp[$keyName];
}
}
$dataTemp[] = $value;
return true;
} /**
* 设置值
* @param unknown $data 容器变量
* @param unknown $path 路径
* @param unknown $value 值
* @param string $delimiter 路径分隔符
* @return boolean
*/
public static function setByPath(&$data,$path,$value,$delimiter='/'){
$pathSplit = explode($delimiter, $path);
$dataTemp = &$data;
foreach ($pathSplit as $keyName){
if(isset($dataTemp[$keyName])){
$dataTemp = &$dataTemp[$keyName];
continue;
}
else{
$dataTemp[$keyName] = array();
$dataTemp = &$dataTemp[$keyName];
}
}
$dataTemp = $value;
return true;
} /**
* 获取值
* @param unknown $data 容器变量
* @param unknown $path 路径
* @param string $delimiter 路径分隔符
* @return NULL|unknown
*/
public static function getByPath(&$data,$path,$delimiter='/'){
$pathSplit = explode($delimiter, $path);
$dataTemp = $data;
foreach ($pathSplit as $keyName){
if(isset($dataTemp[$keyName])){
$dataTemp = $dataTemp[$keyName];
continue;
}
else{
return null;
}
}
return $dataTemp;
} /**
* 是否设置值
* @param unknown $data 容器变量
* @param unknown $path 路径
* @param string $delimiter 路径分隔符
* @return boolean
*/
public static function issetByPath($data,$path,$delimiter='/'){
$pathSplit = explode($delimiter, $path);
$dataTemp = $data;
foreach ($pathSplit as $keyName){
if(isset($dataTemp[$keyName])){
$dataTemp = $dataTemp[$keyName];
continue;
}
else{
return false;
}
}
return true;
} /**
* 删除指定键的值
* @param unknown $data
* @param unknown $path
* @param string $delimiter
* @return boolean
*/
public static function unsetByPath(&$data,$path,$delimiter='/'){
$pathSplit = explode($delimiter, $path);
$dataTemp = &$data;
$lastData = &$data;
$lastKey = '';
foreach ($pathSplit as $keyName){
if(isset($dataTemp[$keyName])){
$lastData = &$dataTemp;
$lastKey = $keyName;
$dataTemp = &$dataTemp[$keyName];
continue;
}
else{
return false;
}
}
unset($lastData[$lastKey]);
return true;
}
}

php N 维数组的读取、设置、删除的更多相关文章

  1. numpy tricks(二)—— 删除多维数组的行或列

    numpy.delete numpy 下的多维数组,如果要删除其中的某些行,或某些列,不可以用置空的方式,进行设置: A[1, :] = None, ⇒ 会将 A 中的第一行数据全部置为 Nan 1. ...

  2. Highcharts使用二维数组生成图表

    Highcharts使用二维数组生成图表 二维数组是更为灵活的一种数据存储方式.在Highcharts中.能够使用配置项column和rows二维数组.对于使用columns构建的二维数组,Highc ...

  3. 剑指offer-面试题4-二维数组中的查找-数组

    /* 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. */ /* 解题 ...

  4. 个人学习记录1:二维数组保存到cookie后再读取

    二维数组保存到cookie后再读取 var heartsArray = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0, ...

  5. 从txt文件中读取数据放在二维数组中

    1.我D盘中的test.txt文件内的内容是这样的,也是随机产生的二维数组 /test.txt/ 5.440000 3.4500006.610000 6.0400008.900000 3.030000 ...

  6. PHP —— 读取文件到二维数组

    转自:PHP读取自定义ini文件到二维数组 读取文件,可以使用file_get_contents,file,parse_ini_file等,现在有一个需求,需要读取如下格式的文件: [food] ap ...

  7. Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印

    1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...

  8. C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

    阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: /*读取txt文件到二维数组*/ #include <iostream> #include <fstream> ...

  9. JS读写Cookie(设置、读取、删除)

    JS读写Cookie(设置.读取.删除) Cookie是客户端存放数据的一种方式,可用来做状态保持. 1.设置Cookie: a.无过期时间:(若不设置过期时间,默认为会话级Cookie,浏览器关闭就 ...

随机推荐

  1. 破解SQLServer for Linux预览版的3.5GB内存限制 (UBUNTU篇)

    在上一篇中我提到了如何破解RHEL上SQLServer的内存大小限制,但是Ubuntu上还有一道检查 这篇我将会讲解如何在3.5GB以下内存的Ubuntu中安装和运行SQLServer for Lin ...

  2. .NET面试题集锦①(Part一)

    一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.面向对象的思想主要包括什么? 答:任何事物都可以理解为对象,其主要特征: 继承.封装.多态.特点:代码好维护,安 ...

  3. Android Retrofit 2.0 使用-补充篇

    推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...

  4. Maven仓库搭建和配置

    maven在本地搭建仓库的实际需求maven在项目构建过程需要下载一些必要的软件包,这些默认的下载链接都是访问maven的远程中央仓库Central Repo.如果项目中的成员,每次第一次构建的时候都 ...

  5. 为什么你SQL Server的数据库文件的Date modified没有变化呢?

    在SQL Server数据库中,数据文件与事务日志文件的修改日期(Date Modified)是会变化的,但是有时候你会发现你的数据文件或日志文件的修改日期(Date Modified)几个月甚至是半 ...

  6. 烂泥:VMWare Workation双网卡配置IP地址

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天给一个客户做远程项目实施,客户那边的服务器是Windows OS的,我们这边的业务 ...

  7. ASP.NET MVC Model绑定(六)

    ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...

  8. Android Studio 轻松整理字符串到string.xml中

    昨天了解了Alt+Enter快捷键的大用处,今天又发现了一个快捷的方法,必须记下来.转载请注明出处http://www.cnblogs.com/LT5505/p/5466630.html 1.首先代码 ...

  9. Google翻译之路

    如何将整个网站都翻译成某种语言,想必大家都有碰到这样的问题吧. 如果能够访问Google的话, 那这个太容易不过了. 来看,下面的就是Google提供的直接翻译某个网站. http://transla ...

  10. Python 小白的新手教程(一)

    本文是 python 入门级别的基础知识,包括数据类型和变量.输入输出.字符串和编码.list tuple dict set .条件判断.循环.函数.切片 迭代 列表生成器 生成器 迭代器等. 参考课 ...