3v4l.org

run code in 300+ PHP versions simultaneously
<?php //declare(strict_types=1); ini_set('display_errors','On'); header("Content-Type: text/plain;charset=utf-8");ini_set('html_errors','0'); //header("Content-Type: text/html;charset=utf-8"); $html=<<<'HTML' <div class="singlepost"> <ul class="linha_status" style=""> <li>Status: <b>Objeto em trânsito - por favor aguarde</b></li> <li>Data : 24/10/2021 | Hora: 12:04</li> <li>Origem: Unidade de Tratamento - Jaboatao Dos Guararapes / PE</li> <li>Destino: Agência dos Correios - Cuitegi / PB</li> </ul> <ul class="linha_status" style=""> <li>Status: <b>Objeto em trânsito - por favor aguarde</b></li> <li>Data : 19/10/2021 | Hora: 00:03</li> <li>Origem: Unidade de Logística Integrada - Curitiba / PR</li> <li>Destino: Unidade de Tratamento - Recife / PE</li> </ul> <ul class="linha_status" style=""> <li>Status: <b>Fiscalização aduaneira finalizada</b></li> <li>Data : 18/10/2021 | Hora: 23:35</li> <li>Local: Unidade Operacional - Curitiba / PR</li> </ul> <ul class="linha_status" style=""> <li>Status: <b>Objeto recebido pelos Correios do Brasil</b></li> <li>Data : 16/10/2021 | Hora: 11:45</li> <li>Local: Unidade de Logística Integrada - Curitiba / PR</li> </ul> <ul class="linha_status" style=""> <li>Status: <b>Objeto postado</b></li> <li>Data : 14/10/2021 | Hora: 20:30</li> <li>Local: País - / </li> </ul> </div> HTML; function json_encode_pretty($data, int $extra_flags = 0, int $exclude_flags = 0): string { // prettiest flags for: 7.3.9 $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | (defined("JSON_UNESCAPED_LINE_TERMINATORS") ? JSON_UNESCAPED_LINE_TERMINATORS : 0) | JSON_PRESERVE_ZERO_FRACTION | (defined("JSON_THROW_ON_ERROR") ? JSON_THROW_ON_ERROR : 0); $flags = ($flags | $extra_flags) & ~ $exclude_flags; return (json_encode($data, $flags)); } function loadHTML_noemptywhitespace(string $html, int $extra_flags = 0, int $exclude_flags = 0): \DOMDocument { $flags = LIBXML_HTML_NODEFDTD | LIBXML_NOBLANKS | LIBXML_NONET; $flags = ($flags & ~ $exclude_flags) | $extra_flags; $domd = new \DOMDocument(); $domd->preserveWhiteSpace = false; @$domd->loadHTML('<?xml encoding="UTF-8">' . $html, $flags); $removeAnnoyingWhitespaceTextNodes = function (\DOMNode $node) use (&$removeAnnoyingWhitespaceTextNodes): void { if ($node->hasChildNodes()) { // Warning: it's important to do it backwards; if you do it forwards, the index for DOMNodeList might become invalidated; // that's why i don't use foreach() - don't change it (unless you know what you're doing, ofc) for ($i = $node->childNodes->length - 1; $i >= 0; --$i) { $removeAnnoyingWhitespaceTextNodes($node->childNodes->item($i)); } } if ($node->nodeType === XML_TEXT_NODE && !$node->hasChildNodes() && !$node->hasAttributes() && ! strlen(trim($node->textContent))) { //echo "Removing annoying POS"; // var_dump($node); $node->parentNode->removeChild($node); } //elseif ($node instanceof DOMText) { echo "not removed"; var_dump($node, $node->hasChildNodes(), $node->hasAttributes(), trim($node->textContent)); } }; $removeAnnoyingWhitespaceTextNodes($domd); return $domd; } $domd=loadHTML_noemptywhitespace($html); $xp=new DOMXPath($domd); $extracted=[]; foreach($xp->query("//div[contains(@class,'singlepost')]/ul") as $ul){ $ulData=[]; foreach($xp->query("./li", $ul) as $li){ $data = explode(":",$li->nodeValue, 2); $uldata[trim($data[0])] = trim($data[1]); } $extracted[]=$uldata; } echo json_encode_pretty($extracted);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.5.10.0130.00718.73
8.5.00.0110.01220.62
8.4.150.0020.00014.05
8.4.140.0110.01017.95
8.4.130.0160.00618.17
8.4.120.0110.00722.77
8.4.110.0140.00723.00
8.4.100.0090.00518.27
8.4.90.0090.00620.93
8.4.80.0110.01020.89
8.4.70.0090.01118.69
8.4.60.0130.00819.19
8.4.50.0140.00719.11
8.4.40.0160.00318.10
8.4.30.0160.00320.95
8.4.20.0070.00420.13
8.4.10.0090.00020.13
8.3.280.0200.00618.88
8.3.270.0090.01017.04
8.3.260.0050.00317.49
8.3.250.0110.00119.38
8.3.240.0140.00717.20
8.3.230.0130.00817.31
8.3.220.0090.00919.30
8.3.210.0110.00718.92
8.3.200.0060.00317.07
8.3.190.0110.00817.67
8.3.180.0040.00417.28
8.3.170.0060.01319.35
8.3.160.0070.01117.68
8.3.150.0190.00021.29
8.3.140.0090.00017.61
8.3.130.0060.00319.03
8.3.120.0030.00619.51
8.3.110.0100.00620.94
8.3.100.0030.00624.06
8.3.90.0050.00326.77
8.3.80.0060.00317.13
8.3.70.0120.00617.13
8.3.60.0110.00719.05
8.3.50.0150.00420.14
8.3.40.0080.00819.42
8.3.30.0120.00419.16
8.3.20.0030.00524.18
8.3.10.0000.00824.66
8.3.00.0050.00326.16
8.2.290.0100.01016.99
8.2.280.0110.00918.79
8.2.270.0130.00617.64
8.2.260.0000.00817.26
8.2.250.0080.00017.01
8.2.240.0130.00319.25
8.2.230.0040.00422.58
8.2.220.0080.00037.54
8.2.210.0080.00026.77
8.2.200.0060.00317.25
8.2.190.0110.01117.00
8.2.180.0160.00025.92
8.2.170.0100.00619.33
8.2.160.0160.00322.96
8.2.150.0080.00025.66
8.2.140.0000.00824.66
8.2.130.0040.00426.16
8.2.120.0050.00321.36
8.2.110.0070.00320.85
8.2.100.0100.00020.85
8.1.330.0090.01018.63
8.1.320.0140.00816.61
8.1.310.0080.00817.30
8.1.300.0160.00318.84
8.1.290.0060.00318.88
8.1.280.0140.00725.92
8.1.270.0040.00424.16
8.1.260.0080.00026.35
8.1.250.0040.00428.09
8.1.240.0070.00318.99
8.1.230.0060.00321.04

preferences:
34.58 ms | 403 KiB | 5 Q