2016-08-22 2 views
1

J'exécution d'une requête qui affiche un tableau multidimensionnel comme celui-ci: -PHP Tableau Multidimensional Fusion Edition

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 

      ) 

) 

Je suis en train de faire le tableau ressemble à ceci afin que nous puissions boucle à travers sur notre site: -

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

Tout ceci est généré en utilisant PHP en utilisant Symfony2 et Doctrine2. J'ai essayé quelques méthodes pour obtenir ce travail mais je suis revenu à ma première méthode est la suivante: -

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

Si quelqu'un peut me montrer comment contourner ce problème, ce serait génial.

Répondre

2

$query->fetchAll() est lui-même un tableau multidimensionnel dont vous avez besoin.

ligne suivante il suffit de remplacer

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

avec

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

Il ne fonctionnait pas parce que vous poussiez tableau multidimensionnel dans un autre tableau. Ce que nous devons réellement faire est de pousser l'élément un par un dans le tableau principal.

+0

J'ai essayé ceci et quand j'ai enlevé les crochets de $ companies ainsi que le array_replace_recursive il a montré un tableau vide. Lorsque je replace les crochets et supprime array_replace_recursive, j'ai exactement la même réponse qu'avant. –

+0

Salut Alok, c'est génial et cela a fonctionné un régal. Je vous remercie. Cependant, comment pourrais-je le fusionner car les deux valeurs sont similaires. –

+1

Vous devrez garder trace des identifiants que vous visitez dans 'foreach' seulement insérer un tableau si l'ID n'est pas visité auparavant. –

0

Je vous suggère d'éviter les requêtes SQL en boucle. Vous avez également des codes postaux de concaténation de vulnérabilité d'injection SQL potentiels à votre requête. Donc la solution possible peut remplacer votre boucle foreach avec quelque chose comme:

$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

vous pouvez transformer le tableau multidimensionnel comme ceci.

$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 est ce que vous voulez.