Hulp met Array
Je wilt een array in meerdere stukken hakken? Kun je anders misschien iets beter uitleggen wat je precies wilt?
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>
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.
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...
Je moet echt meer info geven.
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?
De gegeven oplossingen voldoen als oplossing van jouw vraag. Is dat niet het geval dan zal je toch je vraag anders moeten formuleren.
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]);
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
buiten je foreach.
p.s. als dat niet werkt probeer eens:
echo $messages[0][0];
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!