<?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. ADO.NET编程之美----数据访问方式(面向连接与面向无连接)

    最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...

  2. 使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞

    使用Nginx 让IIS和Tomcat等多个站点一起飞 前言: 养成一个好习惯,解决一个什么问题之后就记下来,毕竟“好记性不如烂笔头”. 这样也能帮助更多的人 不是吗? 最近闲着没事儿瞎搞,自己在写一 ...

  3. SQL Server常见问题介绍及快速解决建议

    前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...

  4. wireshark 相关提示

    Packet size limited during capture      提示说明标记的包没有抓全,在某些操作系统中,默认只抓96个字节,tcpdump中有"-s"参数可用于 ...

  5. 搭建个人wordpress博客(小白教程)

    新浪sae平台现在是有个免费个人空间使用,现在,教您如何使用该平台搭建属于自己的个人网站,本教程以wordpress程序安装包搭建个人网站. 申请新浪云账号 如果我们使用SAE新浪云计算平台作为服务器 ...

  6. opengl 笔记(1)

    参考<opengl入门教程>.<OpenGL之坐标转换>.<OpenGL绘制管线操作细节>等资料. 复习下留个备忘:) /*- * Opengl Demo Test ...

  7. 谈谈 Lock

    上来先看MSDN关于lock的叙述: lock  关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.  下面的示例包含一个 lock 语句. lock  关键字可确保当一 ...

  8. CS Coder学习asp.net5个月的最大感悟:从http的角度重新认识asp.net(二)——我理解的ajax(二)

    啊哈,时隔两个月,才开始写上一篇文章的后续,实在是惭愧.主要是年尾公司又来活了,忙得团团转,而且这段时间在自学mvc.我在上文中,提到过我对mvc框架的初步印象是:相比webform,算是回归了bs本 ...

  9. HTML5 & CSS3初学者指南(2) – 样式化第一个网页

    介绍 我们已经使用基本的 HTML 编写了一个网页.但是,写出来的 HTML 代码的网页看起来很平淡,没有吸引力. 如何改善这种很平淡的页面呢? 让我们开始使用网页的基本样式来改善页面效果,我们将会使 ...

  10. XSS原理

    跨站脚本攻击(Cross-Site Scripting),是一种网站应用程序的安全漏洞,是代码注入攻击的一种.   XSS的种类:   反射型XSS: 非持久型XSS(需要自行触发,输入-输出).  ...