用类进行PHP优化

用类进行PHP优化,php,arrays,multidimensional-array,spl,arrayiterator,Php,Arrays,Multidimensional Array,Spl,Arrayiterator,我在codeigniter中有一个项目,但并不相关 我必须在许多外部服务器车内搜索一些搜索条件,如(销售区域、价格、型号…) 我用xml查询某个外部服务器,该服务器用xml响应我,现在我已经创建了一个模型foreach provider(外部服务器) 我将每个模型的搜索条件传递到我的控制器中,并返回一个嵌套的数组,如下所示: $cars = array( 'car' = array('id' => '', 'name' => '', 'year' => '', 'colo

我在codeigniter中有一个项目,但并不相关

我必须在许多外部服务器车内搜索一些搜索条件,如(销售区域、价格、型号…)

我用xml查询某个外部服务器,该服务器用xml响应我,现在我已经创建了一个模型foreach provider(外部服务器)

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

$cars = array(
   'car' = array('id' => '', 'name' => '', 'year' => '', 'color' => ''...),
   'optional' = array('car_id' => '','key' => ''....),
   'variant' = array('car_id' => '','key' => ''....),
);
主数组内部包含三个数组,其中包含许多键和值,每个可选值表示具有
car\u id
的汽车,每个变量表示具有
car\u id
的汽车 当为每个模型返回此数组时,我会进行合并,因为我创建的数组是标准的,如下所示:

$car_array = array();
$car_provider1 = $this->provider1->getCar();
$car_provider2 = $this->provider2->getCar();
array_merge_recursive($car_array, $car_provider1, $car_provider2);
<?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);
现在我有一个大的数组标准和我的提供商的所有汽车,它可以是一个非常大的数组,里面有三个数组,因为这取决于搜索条件

我的问题是: 有一个像我这样的大嵌套数组,我会有内存问题还是速度慢

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

但我的问题是:最好嵌套一个大数组,还是有一些spl类来管理所有这些数据?(我只需要一个容器来存储数据,将数据转换成json,然后进行一些检查,比如:我有一个相同的汽车来删除它,或者一个我不想要的可选工具,在里面检查或搜索一些东西)


对于我的目标来说,大数组是一个不错的选择吗?

也许我不完全了解您的情况,但我不认为有必要使用数组\u merge\u recursive()

假设您有如下数据:

$car_array = array();
$car_provider1 = $this->provider1->getCar();
$car_provider2 = $this->provider2->getCar();
array_merge_recursive($car_array, $car_provider1, $car_provider2);
<?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);
=>数组合并的非递归版本应该适合您的需要

至于答案本身:

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

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

明智地使用“普通”阵列最有可能在CPU和RAM方面比任何设计定制解决方案的爱好者表现得更好

如果您正在处理的数据集不是海量的(数千到上万条记录),我认为将它们存储在一个数组中没有问题,如果您真的必须同时处理它们的话

如果出现问题,可以研究分页,这样一次只处理少量数据


实际上,从一开始就为分页设计服务是最好的做法,而不是一次处理所有数据,但由于您没有提到这一点,我假设您的所有外部服务都无法处理分页。

您的阵列正在运行,我在阵列中有阵列,car是其中的主阵列,还有其他阵列car,可选和模型好的,现在我了解了需要使用array_merge_recursive(),如果您真的想合并来自提供程序的结果。有一件事我没有从你的问题中得到,那就是提供者是返回多个结果还是返回一个结果。在代码中有“cars”(复数)变量,但内容是没有列表类型结构的单个结果,API名称(getCar())表示单个car。但我想我的主要答案仍然成立,我认为将其实现为数组没有问题。