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,浏览器关闭就 ...
随机推荐
- 以项目谈WebGIS中Web制图的设计和实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景介绍 一般WebGIS项目中,前端展示数据的流程基本是先做数据入 ...
- [译]处理文本数据(scikit-learn 教程3)
原文网址:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html 翻译:Tacey Won ...
- maven-sprigmvc-mybatis配置
pom.xml配置 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.ap ...
- servlet 简介,待完善
什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...
- 关于Genymotion下载比较慢的解决办法
Genymotion号称Android模拟器中运行最快的,但是服务器在国外,Android镜像下载起来那个速度就不想说了. Add new device后下载速度太慢了,容易失败 先登录,然后add, ...
- ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)
ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...
- ReactiveCocoa代码实践之-UI组件的RAC信号操作
上一节是自己对网络层的一些重构,本节是自己一些代码小实践做出的一些demo程序,基本涵盖大多数UI控件操作. 一.用UISlider实现调色板 假设我们现在做一个demo,上面有一个View用来展示颜 ...
- 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 ...
- WPF - 属性系统 (2 of 4)
属性更改回调 前一章的示例中,对各个参数的设置都非常容易理解.如果我们仅仅需要创建一个独立的依赖项属性,那么上面所提到的创建依赖项属性的基础知识足以满足需求.但是事情往往并非如此完美.在一个系统中,很 ...
- 如何安装一个优秀的BUG管理平台——真的是手把手教学!
前言 就BUG管理而言,国内的禅道做得很不错,而且持续有更新.我们来看看如何从头到尾安装禅道,各位要注意的是,不是文章深或者浅,而是文章如何在遇到问题的时候,从什么途径和用什么方法解决问题的.现在发觉 ...