合并/删除具有相同子键的数组

时间:2012-02-20 07:15:45

标签: php arrays merge

我正在基于流畅的界面为我的网站编写数据库类。首先,我收集所有有意义的术语,然后将它们放入“堆栈”,这基本上是一个数组。然后,我对它们进行排序,以便它们出现在实际的SQL查询中。

const stmt_select = 1;
const stmt_insert = 2;
const stmt_delete = 3;

const sql_select = 10;
const sql_from = 11;
const sql_into = 12;
const sql_where = 13;
const sql_join = 14;
const sql_group = 15;
const sql_order = 16;
const sql_limit = 17;

例如,下面的查询(虽然总的垃圾顺序,故意试图抛弃该类):

Query::Select('name', 'age', 'height')
    ->Order('a')
    ->From('table')
    ->From('asd')
    ->Group('a')
    ->Execute();

..产生:

Array
(
    [0] => Array
        (
            [0] => 10
            [1] => Array
                (
                    [0] => name
                    [1] => age
                    [2] => height
                )

        )

    [1] => Array
        (
            [0] => 11
            [1] => asd
        )

    [2] => Array
        (
            [0] => 11
            [1] => table
        )

    [3] => Array
        (
            [0] => 15
            [1] => a
        )

    [4] => Array
        (
            [0] => 15
            [1] => a
        )

)

我遇到的问题是我想要合并的一些数组成员(例如多个 - >选择()/ - > Where()子句)和一些我想要完全删除的数组成员如果有多个实例因为不可能有多个(例如 - > Limit(), - > Order()),但是我不能完全确定最简单的方法是什么。

我正在考虑一个我可以为每个子键调用的函数;

DeleteDuplicates(sql_order);
Merge(sql_select);

不确定如何在没有每次查询大量性能影响的情况下编写这些内容。

1 个答案:

答案 0 :(得分:0)

你的班级应该尽早处理重复。例如,每次调用select()都不应该向主数组添加另一个项目,但是对select()的所有调用都应该收集在同一个堆栈项目中。