使用类进行 PHP 优化


PHP optimization with class

我在代码点火器中有一个项目,但不相关。

我必须使用一些搜索条件在许多外部服务器汽车中进行搜索,例如(销售区域,价格,型号...

我在xml

中向某个外部服务器进行查询,该服务器使用xml响应我,现在我已经为每个提供程序(外部服务器(创建了一个模型。

在我的控制器中,我传递给每个模型搜索条件,并返回一个嵌套如下的数组:

$cars = array(
   'car' = array('id' => '', 'name' => '', 'year' => '', 'color' => ''...),
   'optional' = array('car_id' => '','key' => ''....),
   'variant' = array('car_id' => '','key' => ''....),
);

主数组包含三个内部有许多键和值的数组,每个可选指一辆带car_id的汽车,每个变体都指一辆带car_id的汽车。
当为每个模型返回此数组时,我会进行合并,因为我创建的数组是标准的,如下所示:

$car_array = array();
$car_provider1 = $this->provider1->getCar();
$car_provider2 = $this->provider2->getCar();
array_merge_recursive($car_array, $car_provider1, $car_provider2);

现在我有一个大数组标准,我的提供商的所有汽车,它可以是一个非常大的数组,里面有三个数组,因为取决于搜索条件。

好吧,我的问题是:像我这样的大型嵌套数组最终会出现内存问题或速度慢的问题吗?

使用 SPL 类更好吗?比如ArrayIterator之类的?因为我必须将最终数组传递给控制器,然后我必须将其传递给我的视图。在打印页面之前,我将每个数组转换为 json,因为我使用主干打印所有数组。

但我的问题是:嵌套一个大数组更好,还是有一些 spl 类来管理所有这些数据?(我只需要一个容器来存储数据,在 json 之后进行传输,并进行一些检查,例如:我有一辆同等的汽车删除它,或者我不想要的可选内容,在其中检查或搜索一些东西(。

大阵列是我的目标的好选择吗?

也许我不完全了解您的情况,但我认为不需要 array_merge_recursive((

假设你有这样的数据:

<?php
$carsResponse1 = array(
    array(
        'make' => 'Ford',
        'price' => 3500
    ),
    array(
        'make' => 'GM',
        'price' => 4900
    )
);
$carsResponse2 = array(
    array(
        'make' => 'Acura',
        'price' => 2300
    ),
    array(
        'make' => 'Toyota',
        'price' => 3900
    )
);
$combined = array_merge($carsResponse1, $carsResponse2);
print_r($combined);

现在,运行会产生:

Array
(
    [0] => Array
        (
            [make] => Ford
            [price] => 3500
        )
    [1] => Array
        (
            [make] => GM
            [price] => 4900
        )
    [2] => Array
        (
            [make] => Acura
            [price] => 2300
        )
    [3] => Array
        (
            [make] => Toyota
            [price] => 3900
        )
)

=>数组合并的非递归版本应该可以满足您的需求。

至于答案本身:

我认为使用数组或多个维度没有问题。使用 ArrayIterator 接口意味着只有实现该接口的类的对象可以使用 PHP 的数组语法和迭代功能来处理该类中的数据。

无论该类在内部做什么,都必须使用 PHP 的数组来实现。

明智地使用"普通"阵列很可能比任何更高级的过度设计的定制解决方案在 CPU 和 RAM 方面表现更好。

如果您正在处理的数据集不是很大(数千到数万条记录(,如果您真的必须一次处理它们,我认为将它们存储在数组中没有问题。

如果它成为一个问题,你可以研究分页,所以你一次只处理少量的数据。

实际上,从一开始就设计服务以进行分页将是

最好的选择,而不是一次处理所有数据,但是由于您没有提到它,我假设所有外部服务都无法处理分页。