Hämta info i dubbla steg med preg_match_all

PHPportalen Forum Index » PHP
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
kungmats



Medlem i: 6569 dagar
Från: Falun
Status: Offline



#742737
Inlägg Skrivet: 2020-03-19 12:29      Ämne: Hämta info i dubbla steg med preg_match_all Citera

Jag är tillbaka på preg_match som jag aldrig lyckas lära mig och få till som jag vill.

Jag behöver plocka ut veckodagen som en variabel (det lyckas jag med) från en sida och sedan få varje maträtt den dagen, som en array för att senare splitta.
Jag lyckas endast plocka ut veckodagarna sen är det stopp.

KOD:
1:
preg_match_all('/<p><strong>(.*)<\/strong>/Us', $contents, $dag, PREG_SET_ORDER);
2:
foreach ($dag as $row ) {
3:
 
4:
  echo 'dag '.$row[1].'<br/>';
5:
 
6:
preg_match_all('/<br>(.*?)</', $row[2], $ratt);
7:
   foreach ($ratt[1] as $row2 ) {
8:
 
9:
     echo 'ratt '.$row2[1].'<br/>';
10:
 
11:
   }
12:
      $allaratter[] = $ratt[1];   
13:
 
14:
}

Källkoden ser ut så här:

<p><strong>Måndag: </strong> <br> Helstekt fläskfilé serveras med kantarellsås samt rostad potatis<br> Sprödbakad spätta serveras med smögensås samt dillkokt potatis<br><strong> 👉Veckans vegetariska:</strong><br> Ost &amp; broccolisoppa<br> Oumphgryta med kantareller<br> Krämig morotslasagne serveras med parmesan</p>

<hr class="wp-block-separator"/>

<p><strong>Tisdag: </strong> <br> Biffgryta med lime &amp; koriander serveras med ris<br> Fiskgratäng med champinjoner serveras med kokt potatis<br> <strong> 👉Veckans vegetariska:</strong><br> Ost &amp; broccolisoppa<br> Oumphgryta med kantareller<br> Krämig morotslasagne serveras med parmesan</p>
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
harald_b
Moderator



Medlem i: 5205 dagar
Från: Tavesta
Status: Offline



#742738
Inlägg Skrivet: 2020-03-19 23:06      Ämne: Citera

I så fall är nog första steget att utöka matchningsuttrycket så det matchar maträtterna också.
Frågan som uppstår då är ju om veckans vegitariska skall vara med? Jag gissar att den skall vara med.
I så fall slutar maträtterna antingen med en "<hr" eller med slutet ($).
Då kan du utöka ditt uttryck till '/<p><strong>(.*)<\/strong>(.*)(<hr|$)/Us'

Då hamnar maträtterna i $row[2], så kan du klura vidare hur du löser resten därifrån.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
kungmats



Medlem i: 6569 dagar
Från: Falun
Status: Offline



#742739
Inlägg Skrivet: 2020-03-22 10:46      Ämne: Citera

Tack

Jag ska kika mer på det men nu blev jag blockad (med captcha) från sidan där jag ska hämta infon när jag kör mitt script så jag måste lösa det först Smile
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
kungmats



Medlem i: 6569 dagar
Från: Falun
Status: Offline



#742759
Inlägg Skrivet: 2020-04-08 09:58      Ämne: Citera

Har försökt att kolla på detta lite mer men kör ändå fast. Nu har jag en annorlunda källkod och det är rätterna (en och en) som jag inte får till.
Jag kan ta ut dom som klump för dagen men skulle vilja dela upp "as $row". Jag får bara första bokstaven och inte alla rätter.
Har försökt hitta någon vettig guide eller nåt onlineverktyg där jag kan lära mig mer men har inte hittat något som jag blir hjälpt av.

KOD:
1:
preg_match('/<span class="Rubrik">Måndag(.*)<\/span><br\/>(.*)<br\/><br\/>/Us', $contents, $day1);
2:
 
3:
 
4:
preg_match_all('/<br\/>(.*)<br\/>/', $day1[2], $ratt);
5:
   foreach ($ratt[1] as $row ) {
6:
 
7:
     echo 'ratt '.$row[2].'<br/>';
8:
 
9:
   }


<span class="Rubrik">Måndag 6/4</span><br/><strong>Husman</strong><br/>Nöt- och viltgryta med svamp, rotfrukter, grädde, svartvinbärsgelé & kokt potatis<br/><strong>Världen</strong><br/>Sejfilé med ägg, persilja & kokt potatis<br/><strong>Vego</strong><br/>Stekt ris med ägg, grönsaker & chilidressing<br/><br/>
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
harald_b
Moderator



Medlem i: 5205 dagar
Från: Tavesta
Status: Offline



#742760
Inlägg Skrivet: 2020-04-08 16:31      Ämne: Citera

Du kanske kan prova med preg_split för att dela upp maträttsklumpen.
Var obs på huruvida det är snedstreck efter "<br". Det har varit lite olika bud om den saken i den här tråden, så man kan ju helgardera sig med att sätta frågetecken efter snedstrecket:

PHP:
1:
$allamaträtter = preg_split('/<br\/?>/', $maträttsklump);
2:
foreach($allamaträtter as $row) { ...
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
kungmats



Medlem i: 6569 dagar
Från: Falun
Status: Offline



#742761
Inlägg Skrivet: 2020-04-09 07:46      Ämne: Citera

$allamatratter[1] ger mig samma rätt på flera rader. Ändrar jag till 3 eller 5 får jag nästa maträtt(er) men fortfarande flera ggr.
Någonstans tänker jag fel.

KOD:
1:
$allamatratter = preg_split('/<br\/?>/', $day1[2]);
2:
 
3:
foreach ($allamatratter as $row ) {
4:
echo 'ratt '.$allamatratter[1].'<br/>';
5:
//echo 'ratt '.$allamatratter[3].'<br/>';
6:
//echo 'ratt '.$allamatratter[5].'<br/>';
7:
 
8:
}
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
harald_b
Moderator



Medlem i: 5205 dagar
Från: Tavesta
Status: Offline



#742762
Inlägget är accepterad som det rätta svaret Skrivet: 2020-04-09 11:01      Ämne: Citera

Ja, du skall använda $row i foreach-loopen.
Du kanske kan döpa den till $en_maträtt istället för $row, så blir det lite extratydligt
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
kungmats



Medlem i: 6569 dagar
Från: Falun
Status: Offline



#742764
Inlägg Skrivet: 2020-04-13 15:01      Ämne: Citera

Tack, jag tror jag fick till det till slut Smile
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic