脚本宝典收集整理的这篇文章主要介绍了PHP:需要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","walkins"); $staticArray = array("date","StoreID","storename","productID","productName","managerID","managerName","salesperson");
所以我想重写函数,以便我不再使用eval().我花了相当多的时间在这上面,觉得是时候寻求一些建议了.
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,$staticFieldName,$row[$staticFieldName]); } } protected static function deepAssign(&$array,$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()的替代方法来动态构建多维数组所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。