我有一些逻辑用于对数据进行排序,但根据用户输入,数据的分组方式不同.现在我有五个不同的功能,包含相同的逻辑但不同的分组.有没有办法组合这些功能,并动态设置一个将正确分组的值.在功能中,这些任务正在发生
例如,有时我只是通过以下方式存储计算:
$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; } }
做以下事情会不容易
$calcs = array( $meter['Resource']['name'] => array( $meter['UnitType']['name'] => 'Some Value',$meter['UnitType']['name2'] => 'Some Value Again' ),);
或者您可以使用对象
$calcs = new stdClass(); $calcs->{$meter['UnitType']['name']} = 'Some Value';
但我会建议你在数组中构建你的结构,然后做!
$calcs = (object)$calcs_array;
或者你可以将你的第一个数组循环到一个新数组!
$new = array(); $d = date('Y-m',$start); foreach($meter as $key => $value) { $new[$key]['name'][$d] = array(); }
先给它,看看阵列结构是如何出现的.