php N 维数组的读取、设置、删除
<?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 维数组的读取、设置、删除的更多相关文章
- numpy tricks(二)—— 删除多维数组的行或列
numpy.delete numpy 下的多维数组,如果要删除其中的某些行,或某些列,不可以用置空的方式,进行设置: A[1, :] = None, ⇒ 会将 A 中的第一行数据全部置为 Nan 1. ...
- Highcharts使用二维数组生成图表
Highcharts使用二维数组生成图表 二维数组是更为灵活的一种数据存储方式.在Highcharts中.能够使用配置项column和rows二维数组.对于使用columns构建的二维数组,Highc ...
- 剑指offer-面试题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, ...
- 从txt文件中读取数据放在二维数组中
1.我D盘中的test.txt文件内的内容是这样的,也是随机产生的二维数组 /test.txt/ 5.440000 3.4500006.610000 6.0400008.900000 3.030000 ...
- PHP —— 读取文件到二维数组
转自:PHP读取自定义ini文件到二维数组 读取文件,可以使用file_get_contents,file,parse_ini_file等,现在有一个需求,需要读取如下格式的文件: [food] ap ...
- Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印
1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...
- C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件
阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: /*读取txt文件到二维数组*/ #include <iostream> #include <fstream> ...
- JS读写Cookie(设置、读取、删除)
JS读写Cookie(设置.读取.删除) Cookie是客户端存放数据的一种方式,可用来做状态保持. 1.设置Cookie: a.无过期时间:(若不设置过期时间,默认为会话级Cookie,浏览器关闭就 ...
随机推荐
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- BPM协同平台解决方案分享
一.需求分析 企业信息化的过程都是从单纯解决一个业务功能问题,到解决企业内部业务流程问题,再扩展到解决不同业务流程的关联互动问题, 核心是业务的集成和业务的协同,需要有一个统一的业务协同平台. 国内的 ...
- Android Butterknife 8.4.0 使用方法总结
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6016341.html 本文出自[赵彦军的博客] 前言 ButterKnife 简介 ButterKnife是 ...
- asp.net core 实战之 redis 负载均衡和"高可用"实现
1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...
- 使用apache自带日志分割模块rotatelogs,分割日志
rotatelogs 是 Apache 2.2 中自带的管道日志程序,参数如下(参见:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/rotat ...
- Spring代理模式及AOP基本术语
一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...
- 基于Node.js实现一个小小的爬虫
以前一直听说有爬虫这种东西,稍微看了看资料,貌似不是太复杂. 正好了解过node.js,那就基于它来个简单的爬虫. 1.本次爬虫目标: 从拉钩招聘网站中找出“前端开发”这一类岗位的信息,并作相应页面分 ...
- win7,Mindmanager2012使用模板时弹出Runtime error R6025解决方法
Mindjet.MindManager2012.v10.0在应用个别模板时提示"参数错误",然后自动关闭. 解决办法: 如果是win7系统,可以进入C:\Users\(用户名)\A ...
- Dubbo学习小记
前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...
- [DeviceOne开发]-土地销售项目源码分享
一.简介 这个是一个真实项目开源,虽然不是很花哨,但是中规中矩,小细节处理的也很好,非常值得参考和借鉴.里面的数据都缓存到本地,可以离线运行,但是调整一下代码,马上就可以和服务端完全对接.后续会有详细 ...