0

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

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

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

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

$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 之后,然后进行一些检查,例如:我有一辆平等的汽车删除它,或者我不想要的可选,在里面检查或搜索的东西)。

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

4

1 回答 1

1

也许我不完全了解您的情况,但我认为不需要 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 方面都表现得更好。

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

如果它成为一个问题,您可以查看分页,因此您一次只处理少量数据。

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

于 2013-09-28T09:14:43.280 回答