好吧,所以我知道使用eval()并不是很好,但我无法为我的问题找到更好的解决方案,直到最近,没有性能原因不使用它.但是,我现在正在将足够的数据传递给函数,因为它正在花费不可接受的时间.

被调用的函数是:

public static function makeAMultiDimensionalArrayWithSumsBasedOnMultipleFields($inArray, $dimensionFieldNames, $sumFieldNameArray, $staticFieldNameArray = array())

{

$outArray = array();

// Just in case the array has indices, sort it so array_pop works as expected.

ksort($dimensionFieldNames);

foreach ($inArray as $row)

{

// make sure each row in the inArray has all keys specified by $dimensionFieldNames

$allFieldsPresent = TRUE;

foreach ($dimensionFieldNames as $keyFieldName)

{

if (!array_key_exists($keyFieldName, $row))

{

// Note that alternatively we could set the field to a specified default value.

$allFieldsPresent = FALSE;

}

}

if ($allFieldsPresent)

{

$indexString = '';

$keyFieldNameArrayCopy = $dimensionFieldNames;

foreach ($dimensionFieldNames as $keyFieldName)

{

$indexString .= "['" . $row[$keyFieldName] . "']";

// lets sum values

foreach ($sumFieldNameArray as $sumFieldName)

{

eval ('$outArray' . $indexString . '[' . $sumFieldName . '] += $row[' . $sumFieldName . '];');

}

foreach ($staticFieldNameArray as $staticFieldName)

{

eval ('$outArray' . $indexString . '[' . $staticFieldName . '] = $row[' . $staticFieldName . '];');

}

}

}

}

return $outArray;

}

它被称为这样:

makeAMultiDimensionalArrayWithSumsBasedOnMultipleFields($data, $dimensionArray, $sumArray, $staticArray);

传递给函数的变量类似于:

$dimensionArray = array("firstLevelID", "secondLevelID", "thirdLevelID", "fourthLevelID", "fifthLevelID");

$sumArray = array("revenue", "cost", "profit", "sales", "inquires", "cost", "walkins");

$staticArray = array("date", "storeID", "storeName", "productID", "productName", "managerID", "managerName", "salesperson");

所以我想重写函数,以便我不再使用eval().我花了相当多的时间在这上面,觉得是时候寻求一些建议了.

目标是获取一个数组数组,并根据$dimensionArray中的维度将其转换为多维数组.

我现在不想向你提供太多细节,所以请问你是否需要更多或有任何其他问题

最佳答案 哇,好的.第一次通过我错过了你的索引连接.试试这个:

if ($allFieldsPresent) {

$keys = array();

foreach ($dimensionFieldNames as $keyFieldName) {

$keys[] = $row[$keyFieldName];

// lets sum values

foreach ($sumFieldNameArray as $sumFieldName)

self::deepAssign($outArray, $keys, $sumFieldName, $row[$sumFieldName], true);

foreach ($staticFieldNameArray as $staticFieldName)

self::deepAssign($outArray, $keys, $staticFieldName, $row[$staticFieldName]);

}

}

protected static function deepAssign(&$array, $keys, $fieldName, $value, $sum = false) {

$target =& $array;

foreach ($keys as $key) {

if (!isset($target[$key]))

$target[$key] = array();

$target =& $target[$key];

}

if($sum)

$target[$fieldName] += $value;

else

$target[$fieldName] = $value;

}

php替代eval_PHP:需要eval()的替代方法来动态构建多维数组相关推荐

  1. Java黑皮书课后题第8章:**8.19(模式识别:四个连续相等的数)编写下面的方法,测试一个二维数组是否有四个连续相等的数字(水平、垂直、对角线方向都可以)。编写一个测试程序,提示用户输入一个数组

    **8.19(模式识别:四个连续相等的数)编写下面的方法,测试一个二维数组是否有四个连续相等的数字(水平.垂直.对角线方向都可以).编写一个测试程序,提示用户输入一个数组 题目 题目描述与运行实例 破 ...

  2. C++ 动态开辟二维数组的的方法

    近日写到一个程序,用到了要动态开辟二维数组,一想,自己就会两种.一者:用new在堆上开辟:二者:用vector开辟.技巧没有多少,但是确实是折腾了我半天!首先,大家去网上搜一下,动态开辟二维数组的文章 ...

  3. 【原】动态申请二维数组并释放的三种方法

    在C++中实现变长数组 一般来说,有三种方法来申请多维数组:C的malloc/Free    C++的new/delete    STL容器Vector 1.变长一维数组 这里说的变长数组是指在编译时 ...

  4. php判断几维数组的方法,php判断是几维数组

    php判断是几维数组的方法:首先获取需要进行判断的数组:然后使用自定义的"aL"方法实现判断数组是几维数组:最后通过"max($al)"方法获取数组的维度即可. ...

  5. C语言初学者必看--动态定义二维数组的方法

    首先要明白,二维数组本质上也是一维的,二维只是人为想象出的空间感. 其实二维数组a[i][j]的不同之处在于,它的数组名a是一个二级指针,它直接指向一个指针数组(元素都是指针的数组),a中储存的就是该 ...

  6. 纯c语言实现动态分配多维数组的方法

    http://etdata.blogbus.com/logs/2232838.html 转载自Fish-Bowl 普通的动态内存分配只能分配一维的数组: 例如: #define ARRAY_SIZE  ...

  7. 用malloc动态申请一个二维数组的三种方法

    方法一:利用二级指针申请一个二维数组. #include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态 ...

  8. 让一维指针指向二维数组空间的方法!

    背景:int *p;int a[10][10];如何让一维指针p指向a[10][10]开辟的内存空间? 正确的方法: 1.开始我用的笨方法是另外开辟一个内存空间int*p=new int [100]; ...

  9. C语言二维数组内存申请及初始化方法

    C语言中没有专用来申请二维数组的库函数,只能手动申请内存来构建二维数组,通常的方法如下: (1)先申请二维数组中的所有一维数组指针之和大小的内存: (2)循环申请一维数组大小的内存. int** th ...

最新文章

  1. drupal7获取当前路径别名
  2. python开发效率高吗_提升python开发者工作效率的六个库,你知道几个?
  3. java面向对象测试_Java面向对象测试题(一).doc
  4. 优化的ms sql server分页sql语句
  5. 三相同步电机怎么接线图_智能电表怎么接线 单相 三相电表接线图大全
  6. C++学习之路 | PTA乙级—— 1033 旧键盘打字 (20 分)(精简)
  7. 【Spark】Spark调优 资源调优
  8. 揭秘:名震天下的震网病毒(Stuxnet)是如何被发现的?
  9. 数据库三大范式、BCNF范式、反范式
  10. 菜鸡程序员都是怎样写代码的?
  11. 如何为水晶报表rpt文件添加数据连接
  12. eeepc linux 窗口管理器,EeePC安装Windows 7全教程 全机型适用
  13. Web scraper 爬虫傻瓜教程(不断更新中)
  14. vite:vue中引入图片报错require is not defined
  15. 程序员面试中一面、二面、三面有什么区别?
  16. win10启动项(win10启动项怎么添加)
  17. PIE-Engine APP:广东省生态遥感指数研究
  18. 配置管理——配置管理委员会
  19. MOSS工作流 InfoPath+WorkFlow+Moss 开发要点
  20. 如何高效的进行项目发版?

热门文章

  1. psutil python库
  2. html块状元素和内联元素_HTML中的内联元素和块元素-解释
  3. azure多功能成像好用吗_了解Azure持久功能
  4. linux怎么打开pak文件怎么打开,在elementary OS系统中开启Flatpak应用程序支持
  5. Django复习:创建与使用
  6. C语言:用单链表实现输入排序
  7. 牛逼了,用Python攻破wifi密码
  8. 如何通过 Python 和 OpenCV 实现目标数量监控?
  9. TF-卷积函数 tf.nn.conv2d 介绍
  10. WhatFont——Google Chrome字体识别扩展