Returnen van alle values in een functie
Ik ben bezig met een functie om formulier velden te tonen, maar krijg het niet voor elkaar om alle velden te returnen.
Dit is een niet-volledig uitgewerkt voorbeeld (het gaat om de foreach):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function mijn_function()
// hier initieer ik $fields en $value etc
if( $fields ) {
foreach( $fields as $field_name => $field ) {
$the_field = '';
$the_field .= '<p>';
if ( $field['type'] == 'text' ) {
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'textarea' ) {
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'url' ) {
$the_field .= '<span>'.$value.'</span>';
}
$the_field .= '</p>';
return $the_field;
}
}
}
// hier initieer ik $fields en $value etc
if( $fields ) {
foreach( $fields as $field_name => $field ) {
$the_field = '';
$the_field .= '<p>';
if ( $field['type'] == 'text' ) {
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'textarea' ) {
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'url' ) {
$the_field .= '<span>'.$value.'</span>';
}
$the_field .= '</p>';
return $the_field;
}
}
}
Hij returned alleen het eerste veld (het 'text' veld). Ik weet dat dit normaal gedrag is, maar het lukt me niet om dit werkend te maken... zodat alle velden gereturned worden.
Moet ik het result omzetten naar een array en dan in één keer returnen? Wie kan me verder helpen?
Guido
Gewijzigd op 19/07/2019 15:59:07 door Guido -
Code (php)
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
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
<?php
function mijn_function()
{
if( $fields )
{
foreach( $fields as $field_name => $field )
{
$the_field = '';
$the_field .= '<p>';
if ( $field['type'] == 'text' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'textarea' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'url' )
{
$the_field .= '<span>'.$value.'</span>';
}
$the_field .= '</p>';
return $the_field;
}
}
}
?>
function mijn_function()
{
if( $fields )
{
foreach( $fields as $field_name => $field )
{
$the_field = '';
$the_field .= '<p>';
if ( $field['type'] == 'text' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'textarea' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'url' )
{
$the_field .= '<span>'.$value.'</span>';
}
$the_field .= '</p>';
return $the_field;
}
}
}
?>
Code (php)
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
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
<?php
function mijn_function()
{
$the_field = '';
if( $fields )
{
foreach( $fields as $field_name => $field )
{
$the_field .= '<p>';
if ( $field['type'] == 'text' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'textarea' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'url' )
{
$the_field .= '<span>'.$value.'</span>';
}
$the_field .= '</p>';
}
}
return $the_field;
}
?>
function mijn_function()
{
$the_field = '';
if( $fields )
{
foreach( $fields as $field_name => $field )
{
$the_field .= '<p>';
if ( $field['type'] == 'text' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'textarea' )
{
$the_field .= '<span>'.$value.'</span>';
}
if ( $field['type'] == 'url' )
{
$the_field .= '<span>'.$value.'</span>';
}
$the_field .= '</p>';
}
}
return $the_field;
}
?>
Waar $fields vandaan komt zie ik niet.
Misschien handig om in de functie aanroep te zetten.
Dus: function mijn_function( $fields )
Het return-statement (regel 23) zou tussen regel 24 en 25 (in het fragment van @adoptive) geplaatst moeten worden.
Waar komt $fields trouwens vandaan (en hoe kan dit uberhaupt werken op dit moment, is dit een volledig codefragment)?
En wat gebeurt er als $fields niet bekend is? Dan wordt er niets geretourneerd. Het is meestal handiger als er altijd iets wordt teruggegeven, al was het maar false ofzo.
Gewijzigd op 19/07/2019 15:25:03 door Thomas van den Heuvel
Quote:
Er ontbreken alleen een paar { en $ tekens
Stom, wordt aangepast. Maar nog steeds wordt alleen het eerste veld gereturned (type 'text').
Quote:
En $the_field staat binnen de foreach, dus geen wonder dat alleen het eerste veld wordt teruggegeven.
Als ik hem na de closing tag van de foreach plaats, wordt alleen de laatste veld gereturned (type 'url').
Ik had al aangegeven dat het om de foreach ging, de rest vd functie leek me niet relevant en daarom niet volledig vermeld. Overigens, als ik echo ipv return worden alle velden wel weergegeven.
Code (php)
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
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
function mijn_function( $fields )
{
$the_field = '';
foreach( $fields as $field_name => $field )
{
$the_field .= '<p>';
if ( $field_name == 'text' )
{
$the_field .= '<span>' . $field . '</span>';
}
if ( $field_name == 'textarea' )
{
$the_field .= '<span>' . $field . '</span>';
}
if ( $field_name == 'url' )
{
$the_field .= '<span>' . $field . '</span>';
}
$the_field .= '</p>' . PHP_EOL;
}
return $the_field;
}
$inputvelden = [];
$inputvelden['text'] = 'Een tekst';
$inputvelden['textarea'] = 'Tekst in een textarea';
$inputvelden['url'] = 'http://www.example.com';
echo mijn_function( $inputvelden );
?>
function mijn_function( $fields )
{
$the_field = '';
foreach( $fields as $field_name => $field )
{
$the_field .= '<p>';
if ( $field_name == 'text' )
{
$the_field .= '<span>' . $field . '</span>';
}
if ( $field_name == 'textarea' )
{
$the_field .= '<span>' . $field . '</span>';
}
if ( $field_name == 'url' )
{
$the_field .= '<span>' . $field . '</span>';
}
$the_field .= '</p>' . PHP_EOL;
}
return $the_field;
}
$inputvelden = [];
$inputvelden['text'] = 'Een tekst';
$inputvelden['textarea'] = 'Tekst in een textarea';
$inputvelden['url'] = 'http://www.example.com';
echo mijn_function( $inputvelden );
?>
Krijg je dit
Code (php)
1
2
3
2
3
<p><span>Een tekst</span></p>
<p><span>Tekst in een textarea</span></p>
<p><span>http://www.example.com</span></p>
<p><span>Tekst in een textarea</span></p>
<p><span>http://www.example.com</span></p>
Gewijzigd op 19/07/2019 16:12:14 door Adoptive Solution
En is het waarschijnlijk dat de verschillende veldtypen een verschillende opmaak krijgen, en het bovenstaande gevalsonderscheid dus geoorloofd is?
Anders kan het namelijk allemaal een stuk korter.
Misschien is het ook het overwegen waard om hier output buffering te gebruiken, in plaats van alles te concateneren in een string.
Code (php)
Gewijzigd op 19/07/2019 17:02:03 door Thomas van den Heuvel
Ik heb niet de volledige inhoud van de functie hier weergegeven omdat het binnen WordPress gebruikt wordt en ik native WordPress functies aanroep, die ik anders allemaal hier moet gaan uitleggen.
Daarom dacht ik dat ik kon volstaan met de kern van mijn probleem: hij returned alleen het eerste of laatste veld (afhankelijk op welke locatie ik return plaats binnen de functie).
Quote:
Wil je ook echt een lege paragraaf retourneren als de veldnaam niet bekend is?
Nee sorry, als veld type niet ondersteund wordt moet hij inderdaad een melding returnen (had ik niet verwerkt in mijn voorbeeld).
Echo gebruiken is helaas geen optie, omdat ik de output weer in een andere functie aanroep.
Guido
Guido - op 19/07/2019 17:17:43:
Echo gebruiken is helaas geen optie, omdat ik de output weer in een andere functie aanroep.
Je bedoelt dat het niet de bedoeling is dat de functie zelf output produceert? Dat gebeurt ook niet want de output wordt opgevangen in een buffer. Vandaar output buffering. Alle "output" wordt dus nog steeds geretourneerd als string, maar dan zonder al dat gedoe met quotes, concatenering en de hele santekraam.