Supprimer un tr dans une table si td contient un texte précis

oxedgar 5 Messages postés dimanche 27 mai 2007Date d'inscription 30 avril 2017 Dernière intervention - 28 avril 2017 à 17:59 - Dernière réponse : ZeNairolf 1707 Messages postés vendredi 6 mars 2009Date d'inscription 10 juin 2018 Dernière intervention
- 30 avril 2017 à 04:43
Bonjour,

Voici mon problème après plusieurs tentatives infructueuses!

Je cherche à nettoyer le contenu d'une table. Le but est de travailler un code html de manière a ce que toutes les ligne de cette table soient supprimées si le champs Quantité vaut " 0"!

Je pense être près du but mais je ne parviens pas a mes fins!

Si quelqu'un peut m'aider?

<?php
$table = <<< EOD
<table style="width: 100%;" class="formTableLayout" border="0" id="form_24_page_0">

   
 <tbody>
 
    <tr>
        <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:left;vertical-align:middle;"> FR: <strong><span style="color: #FF7238;">Sacs (emb de 10 sacs)</span></strong><br> DE:<strong><span style="color: #FF7238;">Säcke (Pack 10 Stück)</span></strong><br> </td>
     <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> <img src="http://domaine.xyz/images/poubelle.jpg " alt="Sacs" width="36"> 
        </td>
        <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> <strong>110l</strong><br><strong>-</strong>
        </td>
        <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;">  0 
        </td>
        <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> -  
        </td>
        <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> Infos utiles / Wichtige Informationen<br><strong>-</strong><br>
        </td>
     </tr>
     <tr>
         <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:left;vertical-align:middle;"> FR: <strong><span style="color: #FF7238;">Bac</span></strong><br> DE: <strong><span style="color: #FF7238;">Behälter)</span></strong><br> </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> <img src="http://domaine.xyz/images/Bac.jpg " alt="Bac" width="36"> </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> <strong>-</strong><br><strong>-</strong></td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;">  0 </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> -  </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> Infos utiles / Wichtige Informationen<br><strong> - </strong><br></td>
   </tr>
   <tr>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:left;vertical-align:middle;"> FR: <strong><span style="color: #FF7238;">Carton</span></strong><br> DE: <strong><span style="color: #FF7238;">Karton</span></strong><br> </td><td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> <img src="http://domaine.xyz/images/Carton.jpg " alt="Carton" width="36"> </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> <strong> - </strong><br><strong>-</strong></td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;">  1 </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> -  </td>
   <td style="padding:5px;border:1px solid#9b9f8f;font-size:10pt;text-align:center;vertical-align:middle;"> Infos utiles / Wichtige Informationen<br><strong> - </strong><br>
   </td>
   </tr>
  </tbody></table>
EOD;
echo $table;
$dom = new \DOMDocument();
$dom->loadHTML($table);
$xpath = new \DOMXPath($dom);

// loop all <tr> element.
foreach ($xpath->query('//tr') as $tr) {
    $tds = $tr->getElementsByTagName('td');
    // get total <td> in this <tr>
    $total_item = $tds->length;

    // loop to all <td> and check.
    for ($i = 0; $i <= ($total_item-1); $i++) {
        // get table cell value.
        $table_cell_value = $tds->item($i)->nodeValue;
        preg_match('/\[  0 ]/', $table_cell_value, $charge_id);

        // check if condition is met, the charge_id is 13.
        if (is_array($charge_id) && array_key_exists(1, $charge_id) && $charge_id[1] == " 0") {
            // condition met. charge_id is 13. remove this table row.
            echo "passeici";
            $tr->parentNode->removeChild($tr);
        }
       

        unset($charge_id, $table_cell_value);
    }

    unset($tds, $total_item);
}

// get the result
$saved_html = preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());
echo $saved_html;
?>


le code d'origirne provien d'ici : http://stackoverflow.com/questions/28406611/how-to-remove-table-row-if-condition-met-in-table-cell-preg-replace-or-domdoc/43575437#43575437

Merci pour votre aide
Afficher la suite 

Votre réponse

1 réponse

ZeNairolf 1707 Messages postés vendredi 6 mars 2009Date d'inscription 10 juin 2018 Dernière intervention - 30 avril 2017 à 04:43
0
Merci
Si la colonne quantité c'est la quatrième, pourquoi ne pas la sélectionner directement au lieu de vérifier chaque ligne une à une?
J'ai réussi à obtenir ce que tu veux comme ça:

// loop all <tr> element.
foreach ($xpath->query('//tr') as $tr) {
    $tds = $tr->getElementsByTagName('td');
    // get total <td> in this <tr>
    $total_item = $tds->length;

    // get table cell value.
    $table_cell_value = $tds->item(3)->nodeValue;
    //var_dump(trim($table_cell_value));
    preg_match('/[0]/', trim($table_cell_value), $charge_id);

	var_dump($charge_id, $table_cell_value);

    // check if condition is met, the charge_id is 13.
    if (!empty($charge_id) && $charge_id[0] == "0") {
        // condition met. charge_id is 13. remove this table row.
        echo "passeici";
        $tr->parentNode->removeChild($tr);
    }
   

    unset($charge_id, $table_cell_value);

    unset($tds, $total_item);
}
 
Commenter la réponse de ZeNairolf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.