gpt4 book ai didi

php - 如何在php中动态设置数组键

转载 作者:可可西里 更新时间:2023-11-01 12:21:36 25 4
gpt4 key购买 nike

我有一些用于对数据进行排序的逻辑,但根据用户输入的不同,数据的分组方式也不同。现在我有五个不同的函数,它们包含相同的逻辑但不同的分组。有没有一种方法可以组合这些功能并动态设置一个可以正确分组的值。在函数中,这些分配正在发生

例如,有时我只是通过以下方式存储计算:

$calcs[$meter['UnitType']['name']] = ...

但其他时候需要更具体的分组:

$calcs[$meter['Resource']['name']][$meter['UnitType']['name']][date('Y-m',$start)] =...

如您所见,有时它存储在多维数组中,有时则不是。我一直在尝试使用 eval() 但没有成功(不确定这是正确的方法)。将数据存储在临时变量中并不能真正节省多少,因为有许多嵌套循环和 if 语句,所以数组必须在多个地方重复。

编辑

我希望下面的例子能更好地解释我的问题。这显然是一个简化版:

if(){
$calcs[$meter['UnitType']['name']] = $data;
} else {
while () {
$calcs[$meter['UnitType']['name']] = $data;
}
}

现在可以使用相同的逻辑,但将其存储在不同的键中:

if(){
$calcs[$meter['Resource']['name']][$meter['UnitType']['name']][date('Y-m',$start)] = $data;
} else {
while () {
$calcs[$meter['Resource']['name']][$meter['UnitType']['name']][date('Y-m',$start)] = $data;
}
}

有没有一种方法可以抽象出 $calc[] 数组中的键,这样我就可以拥有一个函数,而不是拥有具有不同数组键的多个函数?

最佳答案

如果您想动态获取和设置数组值,您可以使用它。

function getVal($data,$chain){
$level = $data;
for($i=0;$i<count($chain);$i++){
if(isset($level[$chain[$i]]))
$level = $level[$chain[$i]];
else
return null; // key does not exist, return null
}
return $level;
}

function setVal(&$data,$chain,$value){
$level = &$data;
for($i=0;$i<count($chain);$i++){
$level = &$level[$chain[$i]]; // set reference (&) in order to change the value of the object
}
$level = $value;
}

工作原理:

调用 getVal($data,array('foo','bar','2017-08')) 将返回 $data['foo'][' bar']['2017-08'].

调用 setVal($data,array('foo','bar','2017-08'),'hello') 将设置值,就像您调用$data['foo']['bar']['2017-08'] = '你好'php magic 将自动创建不存在的键。

如果您想动态构建数组结构,这会很有用。

关于php - 如何在php中动态设置数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com