1. <?php
  2. // 例子
  3. $rowList = array();
  4. $rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_1','D'=>'dira/dirb/dirc/node1','E'=>'nodeName1');
  5. $rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_1','D'=>'dira/dirb/dirc/node2','E'=>'nodeName2');
  6. $rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_2','D'=>'dira/dirb/dirc/node3','E'=>'nodeName3');
  7. $rowList[] = array('A'=>'A_1','B'=>'A_1_1','C'=>'A_1_1_2','D'=>'dira/dirb/dirc/node4','E'=>'nodeName4');
  8.  
  9. $rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_1','D'=>'dira/dirb/dirc/node5','E'=>'nodeName5');
  10. $rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_1','D'=>'dira/dirb/dirc/node6','E'=>'nodeName6');
  11. $rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_2','D'=>'dira/dirb/dirc/node7','E'=>'nodeName7');
  12. $rowList[] = array('A'=>'A_1','B'=>'A_1_2','C'=>'A_1_2_2','D'=>'dira/dirb/dirc/node8','E'=>'nodeName8');
  13.  
  14. $rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_1','D'=>'dira/dirb/dirc/node9','E'=>'nodeName9');
  15. $rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_1','D'=>'dira/dirb/dirc/node10','E'=>'nodeName10');
  16. $rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_2','D'=>'dira/dirb/dirc/node11','E'=>'nodeName11');
  17. $rowList[] = array('A'=>'A_2','B'=>'A_2_1','C'=>'A_2_1_2','D'=>'dira/dirb/dirc/node12','E'=>'nodeName12');
  18.  
  19. $rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_1','D'=>'dira/dirb/dirc/node13','E'=>'nodeName13');
  20. $rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_1','D'=>'dira/dirb/dirc/node14','E'=>'nodeName14');
  21. $rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_2','D'=>'dira/dirb/dirc/node15','E'=>'nodeName15');
  22. $rowList[] = array('A'=>'A_2','B'=>'A_2_2','C'=>'A_2_2_2','D'=>'dira/dirb/dirc/node16','E'=>'nodeName16');
  23.  
  24. // 填值
  25. $nodeTree = array();
  26. foreach ($rowList as $key => $value){
  27. $nodePath = array_pop($value);
  28. $nodeName = array_pop($value);
  29. $path = implode('/childs/', $value);
  30. $nodeInfo = array(
  31. 'nodeName'=>$nodeName,
  32. 'nodePath'=>$nodePath,
  33. );
  34. PathValueHelper::appendByPath($nodeTree, $path, $nodeInfo);
  35. }
  36. // print_r($nodeTree); // 打印存储结构
  37.  
  38. // 取值
  39. $path = 'A_1/childs/A_1_2/childs/A_1_2_1';
  40. if(PathValueHelper::issetByPath($nodeTree, $path)){
  41. echo $path." is exist. \n";
  42. print_r(PathValueHelper::getByPath($nodeTree, $path));
  43. }
  44. else{
  45. echo $path." is not exist. \n";
  46. }
  47.  
  48. $path = 'A_1/childs/A_1_2/childs/A_1_2_5';
  49. if(PathValueHelper::issetByPath($nodeTree,$path)){
  50. echo $path.' is exist.';
  51. print_r(PathValueHelper::getByPath($nodeTree,$path));
  52. }
  53. else{
  54. echo $path." is not exist. \n";
  55. }
  56.  
  57. // 删除值
  58. $path = 'A_1/childs/A_1_2/childs/A_1_2_1';
  59. if(PathValueHelper::issetByPath($nodeTree, $path)){
  60. echo $path." is unseted. \n";
  61. PathValueHelper::unsetByPath($nodeTree, $path);
  62. }
  63. else{
  64. echo $path." is not exist. \n";
  65. }
  66. $path = 'A_1/childs/A_1_2/childs/A_1_2_1';
  67. if(PathValueHelper::issetByPath($nodeTree, $path)){
  68. print_r(PathValueHelper::getByPath($nodeTree, $path));
  69. }
  70. else{
  71. echo $path." is not exist. \n";
  72. }
  73.  
  74. print_r($nodeTree); // 打印存储结构
  75.  
  76. class PathValueHelper {
  77.  
  78. /**
  79. * 追加值
  80. * @param unknown $data 容器变量
  81. * @param unknown $path 路径
  82. * @param unknown $value 值
  83. * @param string $delimiter 路径分隔符
  84. * @return boolean
  85. */
  86. public static function appendByPath(&$data,$path,$value,$delimiter='/'){
  87. $pathSplit = explode($delimiter, $path);
  88. $dataTemp = &$data;
  89. foreach ($pathSplit as $keyName){
  90. if(isset($dataTemp[$keyName])){
  91. $dataTemp = &$dataTemp[$keyName];
  92. continue;
  93. }
  94. else{
  95. $dataTemp[$keyName] = array();
  96. $dataTemp = &$dataTemp[$keyName];
  97. }
  98. }
  99. $dataTemp[] = $value;
  100. return true;
  101. }
  102.  
  103. /**
  104. * 设置值
  105. * @param unknown $data 容器变量
  106. * @param unknown $path 路径
  107. * @param unknown $value 值
  108. * @param string $delimiter 路径分隔符
  109. * @return boolean
  110. */
  111. public static function setByPath(&$data,$path,$value,$delimiter='/'){
  112. $pathSplit = explode($delimiter, $path);
  113. $dataTemp = &$data;
  114. foreach ($pathSplit as $keyName){
  115. if(isset($dataTemp[$keyName])){
  116. $dataTemp = &$dataTemp[$keyName];
  117. continue;
  118. }
  119. else{
  120. $dataTemp[$keyName] = array();
  121. $dataTemp = &$dataTemp[$keyName];
  122. }
  123. }
  124. $dataTemp = $value;
  125. return true;
  126. }
  127.  
  128. /**
  129. * 获取值
  130. * @param unknown $data 容器变量
  131. * @param unknown $path 路径
  132. * @param string $delimiter 路径分隔符
  133. * @return NULL|unknown
  134. */
  135. public static function getByPath(&$data,$path,$delimiter='/'){
  136. $pathSplit = explode($delimiter, $path);
  137. $dataTemp = $data;
  138. foreach ($pathSplit as $keyName){
  139. if(isset($dataTemp[$keyName])){
  140. $dataTemp = $dataTemp[$keyName];
  141. continue;
  142. }
  143. else{
  144. return null;
  145. }
  146. }
  147. return $dataTemp;
  148. }
  149.  
  150. /**
  151. * 是否设置值
  152. * @param unknown $data 容器变量
  153. * @param unknown $path 路径
  154. * @param string $delimiter 路径分隔符
  155. * @return boolean
  156. */
  157. public static function issetByPath($data,$path,$delimiter='/'){
  158. $pathSplit = explode($delimiter, $path);
  159. $dataTemp = $data;
  160. foreach ($pathSplit as $keyName){
  161. if(isset($dataTemp[$keyName])){
  162. $dataTemp = $dataTemp[$keyName];
  163. continue;
  164. }
  165. else{
  166. return false;
  167. }
  168. }
  169. return true;
  170. }
  171.  
  172. /**
  173. * 删除指定键的值
  174. * @param unknown $data
  175. * @param unknown $path
  176. * @param string $delimiter
  177. * @return boolean
  178. */
  179. public static function unsetByPath(&$data,$path,$delimiter='/'){
  180. $pathSplit = explode($delimiter, $path);
  181. $dataTemp = &$data;
  182. $lastData = &$data;
  183. $lastKey = '';
  184. foreach ($pathSplit as $keyName){
  185. if(isset($dataTemp[$keyName])){
  186. $lastData = &$dataTemp;
  187. $lastKey = $keyName;
  188. $dataTemp = &$dataTemp[$keyName];
  189. continue;
  190. }
  191. else{
  192. return false;
  193. }
  194. }
  195. unset($lastData[$lastKey]);
  196. return true;
  197. }
  198. }

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. 以项目谈WebGIS中Web制图的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景介绍 一般WebGIS项目中,前端展示数据的流程基本是先做数据入 ...

  2. [译]处理文本数据(scikit-learn 教程3)

    原文网址:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html 翻译:Tacey Won ...

  3. maven-sprigmvc-mybatis配置

    pom.xml配置 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.ap ...

  4. servlet 简介,待完善

    什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...

  5. 关于Genymotion下载比较慢的解决办法

    Genymotion号称Android模拟器中运行最快的,但是服务器在国外,Android镜像下载起来那个速度就不想说了. Add new device后下载速度太慢了,容易失败 先登录,然后add, ...

  6. ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)

    ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...

  7. ReactiveCocoa代码实践之-UI组件的RAC信号操作

    上一节是自己对网络层的一些重构,本节是自己一些代码小实践做出的一些demo程序,基本涵盖大多数UI控件操作. 一.用UISlider实现调色板 假设我们现在做一个demo,上面有一个View用来展示颜 ...

  8. Create a bridge using a tagged vlan (8021.q) interface

    SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...

  9. WPF - 属性系统 (2 of 4)

    属性更改回调 前一章的示例中,对各个参数的设置都非常容易理解.如果我们仅仅需要创建一个独立的依赖项属性,那么上面所提到的创建依赖项属性的基础知识足以满足需求.但是事情往往并非如此完美.在一个系统中,很 ...

  10. 如何安装一个优秀的BUG管理平台——真的是手把手教学!

    前言 就BUG管理而言,国内的禅道做得很不错,而且持续有更新.我们来看看如何从头到尾安装禅道,各位要注意的是,不是文章深或者浅,而是文章如何在遇到问题的时候,从什么途径和用什么方法解决问题的.现在发觉 ...