lukascivil / treewalker
TreeWalker是一个简单小巧的库,可以帮助您更快地处理PHP中的结构操作
0.41
2016-09-19 02:22 UTC
README
TreeWalker是一个简单小巧的库,可以帮助您更快地处理PHP中的结构操作
- getdiff() - 获取JSON差异
replaceValues() - 递归编辑JSON值- walker() - 递归编辑JSON
- structMerge() - 合并两个结构
- createDynamicallyObjects() - 通过动态键创建嵌套结构
- getDynamicallyValue() - 动态获取结构属性
- setDynamicallyValue() - 动态访问结构属性设置值
structure = ["jsonstring", "object", "array"]
示例 - master
先决条件
- PHP >= 5.5
安装
使用composer
将TreeWalker
的require语句放入您的composer.json
中并安装
{ "require": { "lukascivil/treewalker": "dev-master" } }
composer require lukascivil/treewalker dev-master
手动
包含TreeWalker.php
<?php include 'pathto/TreeWalker.php';
示例
初始化
$treewalker = new TreeWalker(array(
"debug"=>true, //true => return the execution time, false => not
"returntype"=>"jsonstring") //Returntype = ["obj","jsonstring","array"]
);
方法
//getdiff() - this method will return the diference between struct1 and struct2 $struct1 = array("casa"=>1, "b"=>"5", "cafeina"=>array("ss"=>"ddd"), "oi"=>5); $struct2 = array("casa"=>2, "cafeina"=>array("ss"=>"dddd"), "oi2"=>5); $treewalker->getdiff($struct1, $struct2, false) // false -> with slashs Output: { new: { b: "5", oi: 5 }, removed: { oi2: 5 }, edited: { casa: { oldvalue: 2, newvalue: 1 }, cafeina/ss: { oldvalue: "dddd", newvalue: "ddd" } }, time: 0 }
//walker() - Walk recursively through the structure $struct = array("casa"=>2, "cafeina"=>array("ss"=>array("ff"=>21, "ff1"=>22)), "oi2"=>5, "1"=>"", "ss"=>"dddddf"); $treewalker->walker($struct, function(&$struct, $key, &$value) { //Removing element if ($key == "ff") { unset($struct[$key]); } //changing element if ($key == "ff1") { $value = array("son" => "tiago"); } }) Output: {"casa":2,"cafeina":{"ss":{"ff1":{"son":"tiago"}}},"oi2":5,"1":"","ss":"dddddf","time":"0 miliseconds"}
//structMerge() - Merge Structures $struct1 = array("casa"=>1, "b"=>"5", "cafeina"=>array("ss1"=>"1", "ss2"=>"2"), "oi"=>5, "1" => "255"); $struct2 = array("casa"=>2, "cafeina"=>array("ss"=>array("ff"=>21, "ff1"=>22)), "oi2"=>5, "1"=>"", "ss"=>"dddddf"); $treewalker->structMerge($struct2, $struct1, true); //true -> No slashs Output: {"casa":2,"b":"5","cafeina":{"ss1":"1","ss2":"2","ss":{"ff":21,"ff1":22}},"oi":5,"0":"255","oi2":5,"1":"","ss":"dddddf","time":"0 miliseconds"}
//createDynamicallyObjects() - this method will create nested objects with with dynamic keys $struct = array("casa"=>1, "b"=>"5", "cafeina"=>array("ss"=>"ddd"), "oi"=>5, "1" => "255"); //P.s $treewalker->createDynamicallyObjects($struct, array(1,2,5,9,10,11)); Output: { "casa": 1, "b": "5", "cafeina": { "ss": "ddd" }, "oi": 5, "1": { "2": { "5": { "9": { "10": { "11": {} } } } } } }
//getDynamicallyValue() $struct = array("casa"=>2, "cafeina"=>array("ss"=>array("ff"=>21, "ff1"=>22)), "oi2"=>5, "1"=>"", "ss"=>"dddddf"); Static access: $struct["cafeina"]["ss"]; Dynamic access: $treewalker->getDynamicallyValue($struct, array("cafeina","ss")); Output: {"ff":21,"ff1":22}
//setDynamicallyValue() $struct = array("casa"=>2, "cafeina"=>array("ss"=>array("ff"=>21, "ff1"=>22)), "oi2"=>5, "1"=>"", "ss"=>"dddddf"); Static access: $struct["cafeina"]["ss"] = "newvalue"; Dynamic access: $treewalker->setDynamicallyValue($struct, array("cafeina","ss"), "newvalue"); Output: {"casa":2,"cafeina":{"ss":"newvalue"},"oi2":5,"1":"","ss":"dddddf"}
测试
composer install
composer test
附加上下文
如果您需要JS版本也可以比较对象,可以使用这个(JsonDifference)库,它将在客户端产生相同的结果。
许可证
MIT许可证(MIT)
Copyright (c) [2016] [LUCAS CORDEIRO DA SILVA]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.