PHP创建数组通过循环回到论自我,直到所有条记录(PHP Build An Array By Loo

2019-10-29 18:19发布

我有(使用Symfony的),在那里我被传入一个值数组首先构建一个数组PHP中的函数,然后我通过每一个记录循环,但每次改变键/值,直到我跑出来的值...

例如:

我将此值传递到我的getFieldKeys()函数如下:

array(
    'fieldKey'=>'123'
);

在这个函数中,我第一个将此值添加到fieldKey数组,然后看看是否有符合我查询的任何记录......

如果有记录,然后遍历每个这些记录并发送fieldKey值回相同的功能和值添加到阵列...

这所有的作品,但我看阵列aweful。 需要帮助清理这段代码,不知道该怎么办...

public function getFieldKeys($array){

    $em = $this->getEntityManager();
    $fieldKeys[] = $array['fieldKey']; // add original value to fieldKey array...

    // loop over any results and and pass key back into this same function and then do a look up on that key and repeat the process until finished...
    $keys = $em->getRepository('AppBundle:FieldKeys')->findBy([
        'fieldKey' => $array['fieldKey'],
    ]);
    foreach($keys as $key) {
        $fieldKeys[] = $this->getFieldKeys([
            'fieldKey'=>$key->getFieldKey(),
        ]);
    }
    return $fieldKeys;
}

我的最后一个数组看起来像这样 - 让人惊讶!

Array
(
    [0] => ccrs_date
    [1] => Array
        (
            [0] => prelim_title_report_date
            [1] => Array
                (
                    [0] => additional_escrow_deposit_date
                    [1] => Array
                        (
                            [0] => earnest_money_date
                            [1] => Array
                                (
                                    [0] => acceptance_date
                                    [1] => Array
                                        (
                                            [0] => contract_date
                                            [1] => Array
                                                (
                                                    [0] => 
                                                )

                                        )

                                )

                        )

                )

        )

)

我所希望的是更多的东西像这样...

Array
(
    [0] => ccrs_date
    [1] => prelim_title_report_date
    [2] => additional_escrow_deposit_date
    [3] => earnest_money_date
    [4] => acceptance_date
    [5] => contract_date
    [6] => prelim_title_report_date
)

谢谢!

Answer 1:

你已经写了一个递归函数来实现你的钥匙阵列 - 好主意。 但是你的函数返回一个数组,你所添加的结果数组recursivley到当前的阵列导致数组一个嵌套每级下降。

这可能是你所需要的是你的第二个关键始终是一个数组,但你只是在寻找的关键:

public function getFieldKeys($array){

    $em = $this->getEntityManager();
    $fieldKeys[] = $array['fieldKey']; // add original value to fieldKey array...

    // loop over any results and and pass key back into this same function and then do a look up on that key and repeat the process until finished...
    $keys = $em->getRepository('AppBundle:FieldKeys')->findBy([
        'fieldKey' => $array['fieldKey'],
    ]);
    foreach($keys as $key) {
        $tmp = $this->getFieldKeys([
            'fieldKey'=>$key->getFieldKey(),
        ]);
        $fieldKeys[] = reset($tmp);
    }
    return $fieldKeys;
}


文章来源: PHP Build An Array By Looping Back On Self Until All Records Are Found