Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

Videoannonse
Annonse
Arrays er jo ikke vanskelig, tenk på det som ei hylle med merkelapper på hver hylle, hvor du legger du ting du skal bruke senere.

 

$hylle = array();

 

$hylle['øverst til venstre'] = 'bøker';

$hylle['midten høyre'] = 'brev og papir';

 

Eller, et annet eksempel;

$kake = array();

 

$kake['navn'] = 'Sjokoladekake';

$kake['form'] = 'Rund';

$kake['steketid'] = '30 min.';

$kake['ingredienser'] = array('Mel', 'Kakao', 'Margarin', 'Sukker');

 

Så, for å si det enkelt, et array er en samling av variabler. Jeg er ikke spesielt god til å forklare ting, men jeg håper hvertfall at jeg ikke forvirrer deg enda mer :p

 

Ok, takker :D Har vel i grunn brukt det ($_GET, $_POST og $_SERVER, fungerer vel nesten likt). Har bare ikke giddi og lest hvordan man bruker de.

Lenke til kommentar
...

 

Eller, et annet eksempel;

$kake = array();

 

$kake['navn'] = 'Sjokoladekake';

$kake['form'] = 'Rund';

$kake['steketid'] = '30 min.';

$kake['ingredienser'] = array('Mel', 'Kakao', 'Margarin', 'Sukker');[/font]

 

Eventuelt:

 

$kake = array(

"navn" => "Sjokoladekake",

"form" => "Rund",

"steketid" => "30min",

"ingredienser" => array("Mel", "Kakao", "Margarin", "Sukker")

);

Endret av ze5400
Lenke til kommentar
  • 1 måned senere...

Har et lite irriterende problem som jeg ikke synes er stort nok til og lage eget emne om.

 

La oss si at webhosten min gir meg har satt serverrota til og være /home, men alle scriptene mine må ligge i en "undermappe" som f. eks heter /home/www. Skal jeg da inkludere f. eks en fil jeg kaller config.phå lager jeg en variabel: $root = $_SERVER['DOCUMENT_ROOT'] .

"/home/www";

 

Denne variabelen må jeg endre hvis jeg skifter webhost eller skal flytte filene over til serveren fra min egen PC som jeg bruker til go utvikle sidene på.

 

Er det noen måte som er mer "fleksibele" som dere bruker, så dere slipper denne jobben?

 

 

Da pleier jeg og lage en variabel som definere serverrota med den globale matrisen $_SERVER også mappestrukturen.

 

Eks:

 

/root

/home

/config.php

/index.php

Endret av Rockie
Lenke til kommentar

Okey, den her irriterer meg grådig, og mangel på søvn gjør det ikke akkurat enklere. Fikler litt med bbcode-parsing. Intet problem inntil man begir seg ut på to spesielt håpløse tagger, list og quote. Problemet er det samme med begge så for enkelhetsskyld så fokuserer jeg på quote. Problemet med quote er at dette er en av de taggene som både trenger en greedy og en ungreedy pattern alt ettersom hvordan tingene er for å plukke opp akkurat det det skal. To enkle case for å beskrive det:

[quote]Dette er et sitat[/quote][quote]Dette er et annet sitat[/quote]

Denne kan svært enkelt plukkes opp v.hj.a en ungreedy pattern, f.eks

/\[quote\](.*)\[\/quote]/isUue

 

[quote][quote]Dette er et sitat[/quote]Kommentar til sitat[/quote]

Denne kan svært enkelt plukkes opp v.hj.a en greedy pattern.

/\[quote\](.*)\[\/quote]/isue

 

Som man ser av følgende testkode plukker ingen av de opp begge korrekt:

<?php

$text1 = '[quote]Dette er et sitat[/quote][quote]Dette er et annet sitat[/quote]';
$text2 = '[quote][quote]Dette er et sitat[/quote]Kommentar til sitat[/quote]';

echo "Text1 greedy:\n";
echo preg_replace('/\[quote\](.*)\[\/quote]/isu',
			  '<!-- quote start -->\1<-- quote end -->', $text1);
echo "\n\n";

echo "Text1 ungreedy:\n";
echo preg_replace('/\[quote\](.*)\[\/quote]/isUu',
			  '<!-- quote start -->\1<-- quote end -->', $text1);
echo "\n\n";

echo "Text2 greedy:\n";
echo preg_replace('/\[quote\](.*)\[\/quote]/isu',
			  '<!-- quote start -->\1<-- quote end -->', $text2);
echo "\n\n";

echo "Text2 ungreedy:\n";
echo preg_replace('/\[quote\](.*)\[\/quote]/isUu',
			  '<!-- quote start -->\1<-- quote end -->', $text2);
echo "\n";
?>

 

Resultatet blir nemlig

Text1 greedy:
<!-- quote start -->Dette er et sitat[/quote][quote]Dette er et annet sitat<-- quote end -->

Text1 ungreedy:
<!-- quote start -->Dette er et sitat<-- quote end --><!-- quote start -->Dette er et annet sitat<-- quote end -->

Text2 greedy:
<!-- quote start -->[quote]Dette er et sitat[/quote]Kommentar til sitat<-- quote end -->

Text2 ungreedy:
<!-- quote start -->[quote]Dette er et sitat<-- quote end -->Kommentar til sitat[/quote]

og som man ser klarer hver pattern bare en hver (text2 greedy kan lett fikses ved å re-parse innholdet i quote). Så hvordan i alle dager løser man det her? Det er iallfall for meg ingen åpenbar måte å kombinere de på, og å kjøre de sekvensielt vil iallfall ikke gå. Noen som har noen ideer?

Lenke til kommentar
Kan du ikke loope text2 greedy til det ikke er flere quote igjen da?

Jo, som sagt kan det gjøres, men den løser ikke text1. Text1 er to separate sitater, og en greedy pattern vil se det som en. Med andre ord, jeg trenger noe som løser nøstingen samtidig som den takler flere sitater på rad.

 

Ernie, sjekk ut eksempel 3 her, som omhandler akkurat nøstede bbkoder.
Takk skal du ha! Det fungerer eksakt slik jeg vil ha de :)
Lenke til kommentar

Satte sammen noe slikt for å raskt kunne kjøre en rekke funksjoner:

 

function chain_functions() {

$list = array(
1 =>  "function1();",
2 =>  "function2();",
4 =>  "function3();"
);

for($i = 0;$i <= count($list);$i++)
 if($int & pow(2,$i))
eval($list[pow(2,$i)]);
}

Problemet er at jeg ikke har særlig lyst til å bruke eval, men hvis jeg ikke gjør det blir funksjonene automatisk kjørt i det arrayet settes sammen. Noen som har et tips?

Lenke til kommentar

Sorry, glemte å skrive at $int et parameter til chain_functions. Problemet mitt er ikke å få kjørt mange funksjoner etter hverandre, men jeg vil kunne velge hvilke jeg skal kjøre.

 

F. eks. om jeg kjører chain_functions(1) kjører den $list[1], kjører jeg med $int=2 (2^1) kjører den $list[2], og om jeg kjører med $int=3 (2^1 + 2^0) kjører den $list[1] + $list[2], osv. Du får ikke gjort det ved å kjøre en enkel foreach.

 

Takk likevel, hadde helt glemt at jeg kunne kalle på funksjoner på den måten. Noen ide til hvordan jeg får med eventuelle parametere til funksjonen i listen?

Endret av Milktea
Lenke til kommentar

Yo, dude - jeg bryr meg ikke om hvordan du går gjennom listen, prøver bare å vise deg hvordan man kaller funksjoner med variable navn. Du skal få fikse førstnevnte selv. Funksjonsargumenter fungerer på samme måte. (Hvis det er det du mener, kommer egentlig ikke så veldig godt frem)

 

<?php

$functions = array (
	"function1",
	"function2",
	"function3"
);

foreach ( $functions as $function )
	$function ( ++$i );

function function1 ( $arg ) { echo "Running function $arg\n"; }
function function2 ( $arg ) { echo "Running function $arg\n"; }
function function3 ( $arg ) { echo "Running function $arg\n"; }

?>

Running function 1
Running function 2
Running function 3

Endret av Jonas
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...