2016-08-22 3 views
1

병합 : - 나는 배열은 다음과 같이 만들려고 노력하고PHP 다차원 배열은이 같은 다차원 배열을 출력하는 쿼리를 실행하고 문제

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 
    ) 
) 

이것은 모두 Symfony2와 Doctrine2를 사용하여 PHP를 사용하여 생성됩니다. 나는이 작업을 얻는 방법 중 몇 가지를 시도했지만 나는이되는 내 첫 번째 방법으로 다시 복귀 한 - 사람이 어떻게 극복하는 저를 보여줄 수 있다면

$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(); 

, 그것은 좋은 것입니다.

답변

2

$query->fetchAll() 자체는 필요로하는 다차원 배열입니다.

그냥 다른 배열로 다차원 배열을 추진하고 있었기 때문에 그것은 작동하지 않는

$innCompnies=$query->fetchAll(); 
foreach($innCompnies as $inComp) { 
    $companies[]=$inComp; 
} 

과 일치

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

다음 대체합니다. 우리가 실제로해야 할 일은 요소를 하나씩 메인 어레이에 밀어 넣는 것입니다.

+0

나는 이것을 시도하고 array_replace_recursive뿐만 아니라 $ 회사에서 대괄호를 제거하면 빈 배열이 나타납니다. 대괄호를 다시 넣고 array_replace_recursive를 제거하면 이전과 똑같은 대답을 얻을 수 있습니다. –

+0

안녕하세요 알록, 위대하고 대우를 받았습니다. 고맙습니다. 그러나 두 값이 비슷하기 때문에 병합하는 방법은 무엇입니까? –

+1

ID가 이전에 방문되지 않은 경우 'foreach'에서만 삽입 한 ID를 추적해야합니다. –

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') 
); 
0

이렇게 multimentional 배열을 변형 할 수 있습니다.

$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가 원하는 항목입니다.