PHP 多维数组合并问题
PHP Multidimensional Array Merge Issue
我是运行一个输出多维数组的查询,像这样:-
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
(
[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();
如果有人能告诉我如何解决这个问题,那就太好了。
$query->fetchAll()
本身就是你需要的多维数组。
只需替换以下行
$companies[] = array_replace_recursive($query->fetchAll());
和
$innCompnies=$query->fetchAll();
foreach($innCompnies as $inComp) {
$companies[]=$inComp;
}
它不起作用,因为您将多维数组推入另一个数组。我们实际需要做的是将元素一个一个地压入主数组。
我建议您避免 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')
);
你可以像这样变换多维数组。
$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就是你想要的。
我是运行一个输出多维数组的查询,像这样:-
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
(
[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();
如果有人能告诉我如何解决这个问题,那就太好了。
$query->fetchAll()
本身就是你需要的多维数组。
只需替换以下行
$companies[] = array_replace_recursive($query->fetchAll());
和
$innCompnies=$query->fetchAll();
foreach($innCompnies as $inComp) {
$companies[]=$inComp;
}
它不起作用,因为您将多维数组推入另一个数组。我们实际需要做的是将元素一个一个地压入主数组。
我建议您避免 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')
);
你可以像这样变换多维数组。
$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就是你想要的。