Hulp met Array
Ik zit helaas een beetje vast. Ik heb de volgende code. Dit is één variable. Maar, hoe kan ik hier twee van maken? Het moet automatisch, dus geen explode. Ik moet deze namelijk later weer gebruiken in een foreach...
Gewijzigd op 29/08/2011 15:42:07 door Allard Jansen
Gesponsorde koppelingen:
Je wilt een array in meerdere stukken hakken? Kun je anders misschien iets beter uitleggen wat je precies wilt?
Sorry, ik ben eigenlijk al een stukje verder. Ik heb de onderstaande code met output. Alleen wil ik dat er maar één tegelijk word weergegeven, geen twee. Ik heb al heel wat geprobeerd (loop, while, for), maar toch lukt het niet. Kan iemand helpen?
Mijn code:
Ik krijg dit als output, maar het moet eigenlijk één voor één:
Mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function multipleNotices($messages = array())
{
/**
* Check if the array is not empty, if he is,
* return nothing
*/
if (!empty ($messages))
{
/**
* Create an foreach function that split the
* messages
*/
foreach ($messages as $message) {
echo $this->displayNotice($message);
}
}
}
{
/**
* Check if the array is not empty, if he is,
* return nothing
*/
if (!empty ($messages))
{
/**
* Create an foreach function that split the
* messages
*/
foreach ($messages as $message) {
echo $this->displayNotice($message);
}
}
}
Ik krijg dit als output, maar het moet eigenlijk één voor één:
Code (php)
1
2
2
<div id="error-box" class="notice">Eerste bericht</div>
<div id="error-box" class="notice">Het tweede vericht</div>
<div id="error-box" class="notice">Het tweede vericht</div>
Gewijzigd op 28/08/2011 20:13:11 door Allard Jansen
Maar dat is toch ook 1 voor 1? :p Hoe zou je de output willen zien?
Je wilt dat alles in 1 div zit?
Je wilt dat alles in 1 div zit?
Gewijzigd op 28/08/2011 20:14:01 door kees Schepers
Nee, ik zou dit als output willen. (Het is trouwens een form, vandaar die messages array). Kan het niet met een for of while die stopt als hij 1 element heeft?
Allard Jansen op 28/08/2011 20:18:28:
Kan het niet met een for of while die stopt als hij 1 element heeft?
foreach ($messages as $message) {
echo $this->displayNotice($message);
break;
}
Sorry, maar dat werkt helaas niet. Ik krijg enkel bericht één. Maar geen twee. Kan het niet met een while of for?
Je wilt er toch maar één.
Ja, maar nu krijg ik er geen.
Je krijgt nu de eerste.
Als je niks te zien krijgt zal die eerste leeg zijn.
Als je niks te zien krijgt zal die eerste leeg zijn.
echo $this->displayNotice($messages[0])
Jacco Brandt op 28/08/2011 21:53:19:
echo $this->displayNotice($messages[0])
Haha, dit is inderdaad het simpelst. ;-)
Ja, heb ik ook el geprobeerd. Helaas werkt het niet. Kan het niet in combinatie met een while? Ik ben daar namelijk niet zo'n ster in...
Waarom zou die code niet werken?
Je moet echt meer info geven.
Je moet echt meer info geven.
Oke, ik zou het nog even duidelijk uitleggen. Ik gebruik deze code:
Als ik deze uitvoer krijg ik deze output terug:
Twee arrays dus, beide met een bericht. Deze berichten worden automatisch gemaakt via een form element. Als een veld goed is ingevuld, verdwijnt hij dus. Dan krijg je een lege array. Ik wil alleen maar één bericht te gelijk laten zien. Dus de output moet veranderen. De bovenstaande code moet dus veranderen in deze.
Je ziet het dus, alleen de eerste array word als output gegeven. De andere niet. Hoe kan ik dit in mijn foreach (of er buiten), doen? Kan dat met een while, for, of loop? Want eigenlijk moet ik de maximale output naar 1 zetten. Kan iemand helpen?
Als ik deze uitvoer krijg ik deze output terug:
Twee arrays dus, beide met een bericht. Deze berichten worden automatisch gemaakt via een form element. Als een veld goed is ingevuld, verdwijnt hij dus. Dan krijg je een lege array. Ik wil alleen maar één bericht te gelijk laten zien. Dus de output moet veranderen. De bovenstaande code moet dus veranderen in deze.
Je ziet het dus, alleen de eerste array word als output gegeven. De andere niet. Hoe kan ik dit in mijn foreach (of er buiten), doen? Kan dat met een while, for, of loop? Want eigenlijk moet ik de maximale output naar 1 zetten. Kan iemand helpen?
Gewijzigd op 29/08/2011 15:19:49 door Allard Jansen
De gegeven oplossingen voldoen als oplossing van jouw vraag. Is dat niet het geval dan zal je toch je vraag anders moeten formuleren.
Welke methode kan ik dan gebruiken? Want $messages[0] werkt helaas niet...
Edit:
Het is me inmiddels gelukt. Ik heb de Array eens goed bestudeerd. Deze code werkt perfect:
Edit:
Het is me inmiddels gelukt. Ik heb de Array eens goed bestudeerd. Deze code werkt perfect:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if(empty ($messages[0]))
return $this->displayNotice(next($messages));
/**
* Return the randomized message back
*/
return $this->displayNotice($messages[0]);
return $this->displayNotice(next($messages));
/**
* Return the randomized message back
*/
return $this->displayNotice($messages[0]);
Gewijzigd op 29/08/2011 15:54:30 door Allard Jansen
Allard Jansen op 29/08/2011 15:48:07:
Welke methode kan ik dan gebruiken? Want $messages[0] werkt helaas niet...
Doe eens een var_dump() op $messages
echo $messages[0];
buiten je foreach.
p.s. als dat niet werkt probeer eens:
echo $messages[0][0];
buiten je foreach.
p.s. als dat niet werkt probeer eens:
echo $messages[0][0];
Aha, dus er zitten lege arrays in $messages. Volgens mij is dit niet echt de beste manier, om twee redenen:
1). Je kunt beter niet het bericht er eerst inzetten en er dan weer uithalen (dat klinkt nogal besluiteloos) Een beetje van: Oh, het zal wel fout zijn. Oh nee! Het is toch goed, we halen het er toch maar uit.
2). Wat is het nut van verschillende arrays als daar alleen maar één zinnetje in staat?
Een beter idee lijkt mij:
Geef ieder element één of meerdere error-messages. Deze slaat hij 'lokaal' op (dus bij zichzelf, in een variabele die HIJ alleen gebruikt). Dan controleert hij het element. Is het fout, dan voeg je de error-message toe (aan een algemene array), is het goed, dan doe je niets.
Trouwens, waarom met arrays werken als je er maar één wilt laten zien?
Hoezo trouwens maar één laten zien? Ja, 10 errors kan natuurlijk als heel veel overkomen (als je dat plots voor je hebt), maar dat heb ik liever dan 10 keer mijn ingevulde gegevens controleren en verbeteren.
Maar nu je dit hebt gelezen, en tóch door wilt gaan met jouw aanpak. Je moet bij SanThe's code van 28/08/2011 20:26:47 gewoon een if toevoegen die controleert of de array NIET leeg is. Dus !empty($message) { echo $message[0]; break; }
Ik hoop dat je er wat aan hebt en ik hoop vooral dat je even aan de logica denkt. Want - als ik je probleem begrijpt - is dit niet echt een logische aanpak.
Toevoeging op 29/08/2011 16:12:55:
Oh, dit bericht had ik langer open dan ik dacht - zo te zien...
1). Je kunt beter niet het bericht er eerst inzetten en er dan weer uithalen (dat klinkt nogal besluiteloos) Een beetje van: Oh, het zal wel fout zijn. Oh nee! Het is toch goed, we halen het er toch maar uit.
2). Wat is het nut van verschillende arrays als daar alleen maar één zinnetje in staat?
Een beter idee lijkt mij:
Geef ieder element één of meerdere error-messages. Deze slaat hij 'lokaal' op (dus bij zichzelf, in een variabele die HIJ alleen gebruikt). Dan controleert hij het element. Is het fout, dan voeg je de error-message toe (aan een algemene array), is het goed, dan doe je niets.
Trouwens, waarom met arrays werken als je er maar één wilt laten zien?
Hoezo trouwens maar één laten zien? Ja, 10 errors kan natuurlijk als heel veel overkomen (als je dat plots voor je hebt), maar dat heb ik liever dan 10 keer mijn ingevulde gegevens controleren en verbeteren.
Maar nu je dit hebt gelezen, en tóch door wilt gaan met jouw aanpak. Je moet bij SanThe's code van 28/08/2011 20:26:47 gewoon een if toevoegen die controleert of de array NIET leeg is. Dus !empty($message) { echo $message[0]; break; }
Ik hoop dat je er wat aan hebt en ik hoop vooral dat je even aan de logica denkt. Want - als ik je probleem begrijpt - is dit niet echt een logische aanpak.
Toevoeging op 29/08/2011 16:12:55:
Oh, dit bericht had ik langer open dan ik dacht - zo te zien...
Ja, dank je. Aan die lege Array's kan ik helaas zelf niks doen. Dat komt door Zend Form. Toch erg bedankt voor jullie hulp!



