<?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. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. Response.Redirect引起的性能问题分析

    现象: 最近做的一个系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到该系统的不同模块.而跳转的时间一直维持子啊几分钟左右. 分析步骤: 在问题复现时抓取Hang d ...

  3. Django admin定制化,User字段扩展[原创]

    前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...

  4. MSYS2——Windows平台下模拟linux环境的搭建

    最近从MSYS1.0迁移到了MSYS2.0,简单讲,MSYS2.0功能更强大,其环境模拟更加符合linux.虽然本身来自cygwin,但其集成了pacman软件管理工具,很有linux范,并且可以直接 ...

  5. Android中常见的图片加载框架

    图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...

  6. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  7. 按照Enterprise Integration Pattern搭建服务系统

    在前一篇文章中,我们已经对Enterprise Integration Pattern中所包含的各个组成进行了简单地介绍.限于篇幅(20页Word以内),我并没有深入地讨论各个组成.但是如果要真正地按 ...

  8. 模仿EF,我们用JS开发的HTML5 SQLite 访问库

    今天终于有空把demo放到了RunJS上面去.请使用google chrome观看在线演示: http://sandbox.runjs.cn/show/pekbd9zb 这个库本来是我们开发的phon ...

  9. Visual Studio Code,完美的编辑器

    今日凌晨,微软的文本(代码)编辑器 Visual Studio Code(简称 VS Code),发布了首个正式版,距离首个 beta 版上线时间刚好一年. 在十多年的编程经历中,我使用过非常多的的代 ...

  10. clang_intprt_t类型探究

    作者:玄魂工作室-钱海龙 问题 这篇手把手教你构建 C 语言编译器,里面有着这样的代码 void eval() { int op, *tmp; while (1) { if (op == IMM) { ...