PHP多维数组合并问题

时间:2016-08-22 09:12:43

标签: php arrays symfony multidimensional-array array-merge

我正在运行一个输出多维数组的查询,如下所示: -

Array
(
[0] => Array
    (
        [0] => Array
            (
                [id] => 772
                [display_name] => Test Company Ltd
                [profile_page] => partners/test-company
            )

    )

[1] => Array
    (
    )

[2] => Array
    (
        [0] => Array
            (
                [id] => 772
                [display_name] => Test Company Ltd
                [profile_page] => partners/test-company

            )

)

我试图让Array看起来像这样,以便我们可以在我们的网站上循环: -

Array
(
[0] => Array
    (
        [id] => 772
        [display_name] => Test Company Ltd
        [profile_page] => partners/test-company
    )
)

这都是使用PHP使用Symfony2和Doctrine2生成的。我已经尝试了几种方法来实现这个功能,但我已经恢复了我的第一种方法: -

$companies = array();

foreach($postcodes as $key=>$value) {
    $conn = $em->getConnection();

    $query = $conn->prepare("SELECT a.id, a.display_name, a.profile_page, b.meta_data FROM companies a, `cms`.pages b WHERE b.slug = a.profile_page AND a.active = 1 AND a.postcode = ".$value."  ORDER BY a.display_name ASC");
    $execute = $query->execute();
    $companies[] = array_replace_recursive($query->fetchAll());
}

echo '<pre>'; print_r($companies); echo '</pre>';

die();

如果有人可以告诉我如何解决这个问题,那就太棒了。

3 个答案:

答案 0 :(得分:2)

je本身就是一个你需要的多维数组。

只需更换以下行

$query->fetchAll()

$companies[] = array_replace_recursive($query->fetchAll());

它无法工作,因为您正在将多维数组推入另一个数组。我们实际需要做的是将元素逐个推入主数组。

答案 1 :(得分:0)

我建议你在循环中避免SQL查询。此外,您还有潜在的SQL注入漏洞将邮政编码连接到您的查询。因此,可能的解决方案可能是用以下内容替换你的foreach循环:

$companies = $conn->fetchAll(
    "SELECT a.id, a.display_name, a.profile_page, b.meta_data FROM companies a, `cms`.pages b WHERE b.slug = a.profile_page AND a.active = 1 AND a.postcode IN :postcodes  ORDER BY a.display_name ASC",
    compact('postcodes')
);

答案 2 :(得分:0)

你可以像这样转换多维数组。

$new_companies = array();
array_walk($companies, function($companie) use($companies, &$new_companies){
  if(is_array($companie)) {
    foreach ($companie as $c) {
        $new_companies[] = $c;
    }
  }
});

$ new_companies就是你想要的。