2017-10-21 62 views
-3

Comment utiliser PHP pour traiter et stocker le tableau ci-dessous dans une chaîne appelée $ answer de sorte que lorsque j'écho $ réponse, j'obtiens le format HTML. Je comprends que je peux juste faire une boucle dans le tableau dans le front-end pour montrer chaque résultat, mais dans ce cas, je veux éviter de le faire.Prétraitement d'un tableau pour un joli affichage en utilisant PHP

Array 
    (
     [0] => Array 
      (
       [assetname] => My file 1 
       [asseturl] => http://URL of file 1 
      ) 

     [1] => Array 
     (
       [assetname] => My file 2 
       [asseturl] => http://URL of file 2 
     ) 

données ci-dessus du tableau à traiter de telle sorte que quand je fais écho $ réponse, je reçois le texte suivant:

<p>Here is a list of results:</p> 
<ul> 
    <li><a href="http://URL of file 1">My file 1</a></li> 
    <li><a href="http://URL of file 2">My file 2</a></li> 
</ul> 
+3

Qu'avez-vous essayé d'effectuer cette tâche? – Tarun

+0

J'ai essayé d'utiliser implode pour fondamentalement aplatir le tableau et bien que cela fonctionne pour des tableaux simples, je n'ai pas été capable de l'étendre pour fonctionner dans mon exemple. – chocolatecoco

+0

Que diriez-vous d'essayer d'itérer sur chaque sous-tableau et essayer de créer le modèle requis. En utilisant chaque sous-tableau que vous pourriez générer "

  • assetName
  • " – Tarun

    Répondre

    1

    C'est simple. Il suffit d'écrire une fonction en prenant votre tableau de réponses. Et puis, au lieu de l'imprimer directement, vous concaténez une chaîne et renvoyez cette chaîne.

    function answer_list(array $answers) : string 
    { 
        $list = "<ul>"; 
        foreach ($answers as $answer) { 
         $list .= sprintf(
          '<li><a href="%s">%s</a></li>', 
          urlencode($answer['asseturl']), 
          htmlspecialchars($answer['assetname']) 
         ); 
        } 
        $list .= "</ul>"; 
        return $list; 
    } 
    

    Je préfère utiliser ext/DOM pour cette thoigh, car cela encoder des caractères spéciaux pour vous automatiquement et peut retourner une chaîne formatée, par exemple

    function answer_list(array $answers) : string 
    { 
        $dom = new DOMDocument; 
        $ul = $dom->createElement('ul'); 
        foreach ($answers as $answer) { 
         $li = $dom->createElement('li'); 
         $a = $dom->createElement('a', $answer['assetname']); 
         $a->setAttribute('href', $answer['asseturl']); 
         $li->appendChild($a); 
         $ul->appendChild($li); 
        } 
        $dom->formatOutput = true; 
        return $dom->saveHTML($ul); 
    } 
    
    +2

    Ne sera pas beaucoup plus agréable si vous laissez l'OP essayer lui-même. – Tarun

    +0

    Merci. Alors que je savais comment parcourir à travers un tableau, je pensais que cela se traduirait par un autre tableau qui n'est pas ce que je voulais. Je sais maintenant que vous pouvez parcourir une rangée pour devenir une chaîne de cette façon. – chocolatecoco