php – 如何通过键名/路径访问和操作多维数组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何通过键名/路径访问和操作多维数组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2859字,纯文字阅读大概需要5分钟。
内容图文
![php – 如何通过键名/路径访问和操作多维数组?](/upload/InfoBanner/zyjiaocheng/717/995b861209cc4c9d8f6a5d981d2d7915.jpg)
我将在PHP中实现一个setter,它允许我指定数组(目标)的键或子键,将名称作为点分隔键值传递.
给出以下代码:
$arr = array('a' => 1,
'b' => array(
'y' => 2,
'x' => array('z' => 5, 'w' => 'abc')
),
'c' => null);
$key = 'b.x.z';
$path = explode('.', $key);
从$key的值我想要达到$arr [‘b’] [‘x’] [‘z’]的值5.
现在,给定$key的变量值和不同的$arr值(具有不同的深度).
如何设置$key引用的元素的值?
对于getter get()我写了这段代码:
public static function get($name, $default = null)
{
$setting_path = explode('.', $name);
$val = $this->settings;
foreach ($setting_path as $key) {
if(array_key_exists($key, $val)) {
$val = $val[$key];
} else {
$val = $default;
break;
}
}
return $val;
}
编写setter比较困难,因为我成功地到达了正确的元素(来自$key),但是我无法在原始数组中设置值,而且我不知道如何一次性指定键.
我应该使用某种回溯吗?或者我能避免吗?
解决方法:
假设$path已经是一个爆炸(或添加到函数)的数组,那么你可以使用引用.如果$path等无效,你需要添加一些错误检查(想想isset):
$key = 'b.x.z';
$path = explode('.', $key);
消气
function get($path, $array) {
//$path = explode('.', $path); //if needed
$temp =& $array;
foreach($path as $key) {
$temp =& $temp[$key];
}
return $temp;
}
$value = get($path, $arr); //returns NULL if the path doesn't exist
Setter / Creator
此组合将在现有数组中设置值,或者如果传递尚未定义的数组,则创建数组.确保定义$array以通过引用& $数组传递:
function set($path, &$array=array(), $value=null) {
//$path = explode('.', $path); //if needed
$temp =& $array;
foreach($path as $key) {
$temp =& $temp[$key];
}
$temp = $value;
}
set($path, $arr);
//or
set($path, $arr, 'some value');
Unsetter
这将取消路径中的最后一个键:
function unsetter($path, &$array) {
//$path = explode('.', $path); //if needed
$temp =& $array;
foreach($path as $key) {
if(!is_array($temp[$key])) {
unset($temp[$key]);
} else {
$temp =& $temp[$key];
}
}
}
unsetter($path, $arr);
*原始答案有一些有限的功能,如果它们对某人有用,我将留下:
二传手
确保定义$array以通过引用& $数组传递:
function set(&$array, $path, $value) {
//$path = explode('.', $path); //if needed
$temp =& $array;
foreach($path as $key) {
$temp =& $temp[$key];
}
$temp = $value;
}
set($arr, $path, 'some value');
或者如果你想返回更新的数组(因为我很无聊):
function set($array, $path, $value) {
//$path = explode('.', $path); //if needed
$temp =& $array;
foreach($path as $key) {
$temp =& $temp[$key];
}
$temp = $value;
return $array;
}
$arr = set($arr, $path, 'some value');
创造者
如果您不想创建数组并可选择设置值:
function create($path, $value=null) {
//$path = explode('.', $path); //if needed
foreach(array_reverse($path) as $key) {
$value = array($key => $value);
}
return $value;
}
$arr = create($path);
//or
$arr = create($path, 'some value');
为了娱乐
构造和评估$array [‘b’] [‘x’] [‘z’]之类的内容;给出一个字符串b.x.z:
function get($array, $path) {
//$path = explode('.', $path); //if needed
$path = "['" . implode("']['", $path) . "']";
eval("\$result = \$array{$path};");
return $result;
}
内容总结
以上是互联网集市为您收集整理的php – 如何通过键名/路径访问和操作多维数组?全部内容,希望文章能够帮你解决php – 如何通过键名/路径访问和操作多维数组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。