PHP中一个大数组算法的优化

PHP中一个大数组算法的优化,php,arrays,optimization,Php,Arrays,Optimization,我有一个从数据库填充数组的查询。在某些情况下,此查询会返回大量数据(例如,100.000条记录)。数据库的每一行至少有6或7列 $results = [ ['id' => 1, 'name' => 'name', 'status' => true, 'date' => '10-01-2012'], ['id' => 2, 'name' => 'name 2', 'status' => false 'date' => '10-01-2013'

我有一个从数据库填充数组的查询。在某些情况下,此查询会返回大量数据(例如,100.000条记录)。数据库的每一行至少有6或7列

$results = [
  ['id' => 1, 'name' => 'name', 'status' => true, 'date' => '10-01-2012'],
  ['id' => 2, 'name' => 'name 2', 'status' => false 'date' => '10-01-2013'],
  ...
]
我需要对
$results
数组中的一些数据进行替换,这是基于另一个数据,该数据提供了有关如何更改行中值的信息

$model = [
    'status' => ['function' => 'formatStatus', params => ['status']],
    'date' => ['function' => 'formatDate', params => ['date']]
]
既然我有了所有的数据,我该怎么处理这些数据,我就有了下面的例行程序

foreach ($results as &$itemResult) {
    $oldValues = $itemResult;
    foreach ($itemResult as $attribute => &$value) {
        if (isset($model[$attribute]['function'])) {
            $function = $model[$attribute]['function'];
            $params = $model[$attribute]['params'];
            $paramsSize = count($params);
            for ($i = 0; $i < $paramsSize; $i++) {
                $newParams[] = $oldValues[$params[$i]];
            }
            $itemResult[$attribute] = call_user_func_array([$this, $function], $newParams);
            $newParams = null;
        }
    }
}
foreach($results as&$itemResult){
$oldValues=$itemResult;
foreach($itemResult作为$attribute=>&$value){
if(isset($model[$attribute]['function'])){
$function=$model[$attribute]['function'];
$params=$model[$attribute]['params'];
$paramsize=计数($params);
对于($i=0;$i<$paramsize;$i++){
$newParams[]=$oldValues[$params[$i]];
}
$itemResult[$attribute]=调用用户函数数组([$this$function],$newParams);
$newParams=null;
}
}
}
因此,对于我的数据数组的每一行的每个属性,我都会运行检查,检查是否存在
函数
参数
信息。当需要替换所讨论的属性时,我通过
call\u user\u func\u array
调用该函数,并用函数返回值替换该值。
还请注意,通过在循环中传递引用
和$itemResult
,我正在替换当前数组,而不是创建另一个数组,因此最终,我从一开始就拥有了相同的数组,但所有需要替换为其新值的列

问题是,对于小数组,这种方法非常好。但对于大公司来说,这会成为一种痛苦

你们能为我提供一些解决这个问题的方法吗?

我应该使用另一个数据结构而不是PHP数组吗

通常,消耗大量内存并不会使事情变慢。在ram中搜索效率低下是导致速度变慢的原因…我想知道SPL中的
iterator\u apply
是否会更快?@HalfCrazed-Hmm,我将尝试使用
iterator\u apply
实现,看看它是如何运行的。谢谢你的建议。另一个可能的优化是使用SplFixedArray而不是普通的数组。。。由于您必须预先定义元素的数量(很容易从查询语句中检索到),因此空间和处理器更加友好。您可以将内部foreach循环更改为$model(而不是$itemResult),以将循环减少一半(使用示例数据)。