PHP Vraagstuk

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben vrij nieuw met php dus brand me aub niet af. Ik heb een variabele $name. In deze variabele zitten 6 andere variabelen, gescheiden door een punt-komma.
Deze 6 andere variabelen wil ik in m'n tabel zetten, maar hoe krijg ik ze eruit? Bijkomend probleem is dat ik de eerste regel er NIET in wil hebben. Een voorbeeld als ik $name echo: var1;var2;var3;var4;var5;var6;

Bij voorbaat dank voor de suggesties. :>

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
Ooit al eens in de PHP manual gezocht op 'arrays'?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 17-09 20:33
ga eens aan de slag met explode(), meer kan ik echt niet zeggen. Je moet het immers zelf leren.

Acties:
  • 0 Henk 'm!

  • Naj_Geetsrev
  • Registratie: Oktober 2002
  • Laatst online: 21-07 13:18
Hier vindt je het commando met uitleg dat je zoekt.

[ Voor 4% gewijzigd door Naj_Geetsrev op 09-05-2003 11:58 . Reden: Explode is idd beter |:( ]


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Je kan natuurlijk het beste gelijk arrays gebruiken, maar als je die string nu eenmaal zo hebt, kun je 'em met explode() uit elkaar halen en er op die manier een array van maken.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok ik probeer het met explode. ik laat wel weten of het wel of niet lukt

Acties:
  • 0 Henk 'm!

Verwijderd

Mafioso schreef op 09 May 2003 @ 11:56:
ga eens aan de slag met explode(), meer kan ik echt niet zeggen. Je moet het immers zelf leren.
offtopic:
Tss, daar heeft ie wat aan zeg. Zeg dan niets. Hoe zou jij je voelen als je net begint met PHP, een vraag voorlegt en zo'n antwoord krijgt? Juist.


Werken met array's is inderdaad in dit geval even het beste, want met explode() los je een probleem op die je al in een eerder stadium moet voorkomen, namelijk het vastleggen en bepalen van de variabelen.

Stel je hebt dit:

PHP:
1
2
3
$var1 = "Karel";
$var2 = "Kees";
$var3 = "Piet";


Stop dit dan in een array, in plaats van variabelen eindigend op een nummer te maken. Je kunt dit o.a. zo doen:

PHP:
1
$var = array('Karel', 'Kees', 'Piet');


Let wel op, een array begint met 0, dan 1, 2, enz.

Als je nu de namen uit wilt lezen cq gebruiken, dan lees je de array bijvoorbeeld zo uit:

PHP:
1
echo $var[o] . "<br>" . $var[1];


Als je nou alle arraywaarden op wilt halen, zou je dit zo kunnen doen (er zijn mooiere methodes / funties):

PHP:
1
2
3
4
5
6
$i = 0;
while ($i < 3) {
   echo $var[$i]; // geeft de arraywaarde weer
   echo "<br>"; // een brake om het mooi te maken... (-:
   $i++; // zorgt ervoor dat de integer i met 1 verhoogd wordt
}


Dit is vooral handig als je array veel waardes bevat.

Succes met arrays, als je ze wilt gebruiken... (-:

[ Voor 19% gewijzigd door Verwijderd op 09-05-2003 12:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thanx! daar kan ik wat mee :)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Verwijderd schreef op 09 May 2003 @ 12:17:
[...]


offtopic:
Tss, daar heeft ie wat aan zeg. Zeg dan niets. Hoe zou jij je voelen als je net begint met PHP, een vraag voorlegt en zo'n antwoord krijgt? Juist.
Meer hoef je toch ook niet te zeggen.. het staat allemaal in de manual.. je moet alleen ff weten welke functie te gebruiken ;)

http://nl.php.net/manual/nl/function.explode.php

Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Verwijderd schreef op 09 May 2003 @ 12:17:
[...]
echo $var[0] . "<br>" . $var[1];
offtopic:
0 ipv o dus...

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor alle feedback.
Ivy, jij zei: Werken met array's is inderdaad in dit geval even het beste, want met explode() los je een probleem op die je al in een eerder stadium moet voorkomen, namelijk het vastleggen en bepalen van de variabelen.

De variabelen worden via een shellscriptje elke 24 uur gelezen en bijgewerkt van een server. Dus ik denk dat ik toch met explode moet gaan werken, of niet? maar dat krijg ik helaas nog niet voor elkaar.

$df = `df -h`;
$arrDf = explode("\n", $df);
while (list(, $line) = each ($arrDf)) {
$arrValues = explode(" ", $line);
while(list(,$value) = each ($arrValues)) {

Dit is het begin van m'n script. Hoe moet ik dan verder? $value moet uit elkaar getrokken worden

[ Voor 8% gewijzigd door Verwijderd op 09-05-2003 13:15 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

code:
1
while (list(, $line) = each ($arrDf)) {
Gebruik alsjeblieft foreach ipv dit soort ranzigheden
code:
1
foreach ( $array as $value ) {

of
code:
1
foreach ( $array as $key => $value ) {


Hoe je verder moet weet ik niet, want ik heb geen flauw idee wat je bedoelt met uit "elkaar trekken". Waarom is explode niet toereikend :? Of een van de andere array-functies :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

$df = `df -h`;
$arrDf = explode("\n", $df);
En ik neem ook aan dat hier nog iets tussenstaat wat je weggelaten hebt ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ehh nee :)
df -h is een shell scriptje

Acties:
  • 0 Henk 'm!

Verwijderd

hij heeft helemaal geen array maar gewoon een string variabele dus dat hele verhaaltje gaat eerst nog niet op.

Wat je moet doen is explode gebruiken welke weer een array levert met daarin de verschillende variabeles. (zie php.net)
Daarna ga je die array uitlezen op de manier zoals ivy zei

Acties:
  • 0 Henk 'm!

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 02-09 17:28

Rashann

Zoek de hond...

Verwijderd schreef op 09 May 2003 @ 14:06:
ehh nee :)
df -h is een shell scriptje
die wordt met de huidige code niet uitgevoerd hoor...
M.a.w. : $df is nu een string met de waarde "df -h"

Maar verder:
code:
1
$arrValues = explode(" ", $line);


Je zei in je beginpost dat de waardes door een ; gescheiden worden, dus zou je ook explode(";", $line); moeten doen.

[ Voor 11% gewijzigd door Rashann op 09-05-2003 14:11 ]

If nothing is written below, I was the last to reply...


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 09 May 2003 @ 14:06:
ehh nee :)
df -h is een shell scriptje
Het enige dat je doet met:
PHP:
1
$df = `df -h`;


is df -h in de string $df zetten, daar zit dan natuurlijk geen \r(enter) in nee.
df -h zou je eerst moetten uitvoeren en daarna pas exploden.

Of lees ik nou weer ergens overheen?
Wat ben je uiteinderlijk vanplan te maken met dit script? Mischien zit je wel in de geheel verkeerde hoek te zoeken?

[edit]
RainManX waarom ben je me nou voor? :+

[ Voor 5% gewijzigd door Verwijderd op 09-05-2003 14:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

shell commando's kun je wel uitvoeren in php, maar dan moet je shell_exec gebruiken

Acties:
  • 0 Henk 'm!

  • dream0r
  • Registratie: Oktober 2001
  • Niet online
Verwijderd schreef op 09 May 2003 @ 11:53:
Ik ben vrij nieuw met php dus brand me aub niet af. Ik heb een variabele $name. In deze variabele zitten 6 andere variabelen, gescheiden door een punt-komma.
Deze 6 andere variabelen wil ik in m'n tabel zetten, maar hoe krijg ik ze eruit? Bijkomend probleem is dat ik de eerste regel er NIET in wil hebben. Een voorbeeld als ik $name echo: var1;var2;var3;var4;var5;var6;

Bij voorbaat dank voor de suggesties. :>
$part = explode(";", $name);
$part[0] etc

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 09 May 2003 @ 14:12:
[...]

Het enige dat je doet met:
PHP:
1
$df = `df -h`;


is df -h in de string $df zetten, daar zit dan natuurlijk geen \r(enter) in nee.
df -h zou je eerst moetten uitvoeren en daarna pas exploden.

Of lees ik nou weer ergens overheen?
Wat ben je uiteinderlijk vanplan te maken met dit script? Mischien zit je wel in de geheel verkeerde hoek te zoeken?

[edit]
RainManX waarom ben je me nou voor? :+
Kijk es goed naar de aanhalingstekens, dat zijn geen gewone.
Als je $string = `commando`; doet voert hij dat commando uit in de shell.

code:
1
2
3
4
5
6
7
$df = `df -h`;
$arrDf = explode("\n", $df);
foreach($arrDf as $woei => $blaat)
{ print htmlspecialchars($blaat);
  if ($woei < sizeof($arrDf)-1)
    print "<br>";
}


is denk ik wat je zoekt :)

=edit=
htmlspecialchars() erbij gepleurd :)


=edit2=

toch maar in een nieuwe post :P

[ Voor 79% gewijzigd door Verwijderd op 09-05-2003 15:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

drm schreef op 09 May 2003 @ 13:21:
[...]

Gebruik alsjeblieft foreach ipv dit soort ranzigheden
Wat is er ranzig aan? je loopt toch gewoon door een array heen, met behulp van het ophogen van de array pointer (die is der wel niet maar goed)

Acties:
  • 0 Henk 'm!

Verwijderd

Net ff een scriptje gemaakt dat de drive info die jij opvraagt in een tabelletje pleurt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$df = `df -h`;
$arrDf = explode("\n", $df);
foreach($arrDf as $woei => $blaat)
{ do 
  {  $blaat = str_replace("  ", " ", $blaat);}
  while (strpos($blaat, "  ") !== false);
    
  list(
    $drives[$woei]["naam"], 
    $drives[$woei]["grootte"], 
    $drives[$woei]["gebruikt"], 
    $drives[$woei]["beschikbaar"], 
    $drives[$woei]["gebruikt%"], 
    $drives[$woei]["mountplaats"])
    = explode(" ", $blaat);
  $num_drives = $woei;
}

print "Aantal drives: ".$num_drives;
print "<table border='1'>";
foreach($drives as $numdrivenu => $driveDataArray)
{   print "<tr>";
    foreach($driveDataArray as $driveDataNu)
    {   print "<td>";
        print htmlspecialchars($driveDataNu);
        print "</td>";
    }
    print "</tr>";
}
print "</table>";
?>


:)

@ TimD:
1. Het ziet er niet uit
2. Het is onnodig ingewikkeld, het is net zoiets als dat je de functie explode() opnieuw gaat schrijven m.b.v. de substr() functie ofzo

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Frappant dat bijna niemand die ``- operators kent... 't Staat toch duidelijk in de manual ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

drm schreef op 09 mei 2003 @ 15:35:
Frappant dat bijna niemand die ``- operators kent... 't Staat toch duidelijk in de manual ;)
Tussen kennen en gebruiken zit nog een wereld van verschil ;) Vind ze persoonlijk nogal verwarrend.. zoals ook al bleek uit de reacties. Was ze dus eigenlijk compleet vergeten :P
Verwijderd schreef op 09 mei 2003 @ 15:23:
[...]

Wat is er ranzig aan? je loopt toch gewoon door een array heen, met behulp van het ophogen van de array pointer (die is der wel niet maar goed)
Omdat je nu in je while loop 2 functies uitvoert over je hele array... nogal nergens voor nodig ;) Dat noemen we dan ook wel 'ranzig'. Je simuleert op een nogal inefficiente manier een foreach lus... die gewoon bestaat in PHP, dus waarom die niet gebruiken ;)

[ Voor 8% gewijzigd door Bosmonster op 09-05-2003 15:43 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Verwijderd schreef op 09 mei 2003 @ 15:25:
Net ff een scriptje gemaakt dat de drive info die jij opvraagt in een tabelletje pleurt:
code:
1
...
Ja, heel handig om variabelen als 'woei' en 'blaat' te introduceren in code die een voorbeeldfunctie heeft en bedoeld is om iemand PHP code te laten begrijpen... Verder vind ik je methode om whitespace te strippen ontzettend ranzig. Split is misschien beter (ook in verband met andersoortige whitespace als tabs, al is dat hier misschien niet aan de orde) of anders strtok. Niet alleen mooier, maar ook veel efficienter.

[ Voor 24% gewijzigd door Soultaker op 09-05-2003 15:57 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Soultaker schreef op 09 May 2003 @ 15:55:
[...]

Ja, heel handig om variabelen als 'woei' en 'blaat' te introduceren in code die een voorbeeldfunctie heeft en bedoeld is om iemand PHP code te laten begrijpen... Verder vind ik je methode om whitespace te strippen ontzettend ranzig. Split is misschien beter (ook in verband met andersoortige whitespace als tabs, al is dat hier misschien niet aan de orde) of anders strtok. Niet alleen mooier, maar ook veel efficienter.
ok, hier dan code met verbeterde variabelen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$df = `df -h`;
$arrDf = explode("\n", $df);
foreach($arrDf as $numdrivenu => $driveData)
{ do 
  {  $driveData = str_replace("  ", " ", $driveData);}
  while (strpos($driveData, "  ") !== false);
    
  list(
    $drives[$numdrivenu]["naam"], 
    $drives[$numdrivenu]["grootte"], 
    $drives[$numdrivenu]["gebruikt"], 
    $drives[$numdrivenu]["beschikbaar"], 
    $drives[$numdrivenu]["gebruikt%"], 
    $drives[$numdrivenu]["mountplaats"])
    = explode(" ", $blaat);
  $num_drives = $numdrivenu;
}

print "Aantal drives: ".$num_drives;
print "<table border='1'>";
foreach($drives as $numdrivenu => $driveDataArray)
{   print "<tr>";
    foreach($driveDataArray as $driveDataNu)
    {   print "<td>";
        print htmlspecialchars($driveDataNu);
        print "</td>";
    }
    print "</tr>";
}
print "</table>";
?>


Verder lijken me split() of explode() niet handig omdat die lege array-elementen returnen, wat samen met implode() dan weer zorgt voor hetzelfde resultaat als waarmee je begint. 100% nutteloos dus. die strtok() functie schijnt geen array te returnen ofzo? Da's heel erg wazig.
Dus ik blijf erbij dat dit de beste methode is die ik kan bedenken :P

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Verwijderd schreef op 09 May 2003 @ 18:51:
Verder lijken me split() of explode() niet handig omdat die lege array-elementen returnen, wat samen met implode() dan weer zorgt voor hetzelfde resultaat als waarmee je begint. 100% nutteloos dus. die strtok() functie schijnt geen array te returnen ofzo? Da's heel erg wazig.
Dus ik blijf erbij dat dit de beste methode is die ik kan bedenken :P
Met split kun je een serie van whitespace-characters als breekpunt laten interpreteren, waardoor je helemaal geen lege elementen krijgt. Strtok levert elementen één voor één op en filtert ook lege elementen uit. Beiden zijn dus zeer bruikbaar, waarbij split wat 'mooier' is omdat 'ie een reguliere expressie gebruikt en een array retourneert, en strtok wat efficiënter omdat 'ie slechts één element tegelijk oplevert (wat het geheugengebruik reduceert) en een stuk sneller is omdat 'ie veel simpeler kan parsen.

Beide methoden (en waarschijnlijk ook de variatie waarbij je zelf de lege waarden uit de ge-explode-de string haalt) zijn in ieder geval een stuk netter en efficiënter dan wat je nu doet.

[ Voor 11% gewijzigd door Soultaker op 12-05-2003 20:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

drm schreef op 09 mei 2003 @ 15:35:
Frappant dat bijna niemand die ``- operators kent... 't Staat toch duidelijk in de manual ;)
Tjah, komt ook uit de *nix wereld he ;)

Ik kan me voorstellen dat als je een commando uit wil laten voeren, dat `` niet het eerste is, waar je op komt met een zoekopdracht.
Pagina: 1