Waarden omzetten binnen een geneste array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart Raymakers

Bart Raymakers

25/07/2021 15:57:26
Quote Anchor link
Dag lieve mensen. Ik heb een probleem met bepaalde waarden die ik in een geneste Array ontvang. Ik kan die waarden op geen enkele manier beter ontvangen, dus moet het omgezet worden. Het gaat om het volgende:

array 

( 'body' => '{

"contactName":"Bart",

"contactPhone":"+32478000000",

"contactEmail":"info@………be",

"contactLanguage":"nl",

"regionId":5,

"passengers":

[{

"name":"Bart",

"child":"",

"weight":"90",

"paymentType":"COUP",

"paymentReference":"1234 5678 90"},

{

"name":"Annelies",

"child":"",

"weight":"70",

"paymentType":"WIRE"},

{

"name":"Amber",

"child":"on",

"weight":"35",

"paymentType":"WIRE"

}

]}

', 

)



Dit moet er gebeuren:


Als “child” empty is, moet het de boolean false dragen;Als “child” de een string ‘on’ bevat, moet het de boolean true dragen;“Weight” moet een integer zijn, geen string, dus zonder haakjes.


Vermits dat dit allemaal in de geneste array zit, weet ik niet goed hoe ik dit moet omzetten. Waarschijnlijk een loop creëren en in de loop de waardes omzetten.

Ik ben nog niet lang bezig met php, dus alle hulp is erg welkom!
Gewijzigd op 26/07/2021 08:04:12 door Bart Raymakers
 
PHP hulp

PHP hulp

20/10/2021 05:43:30
 
Adoptive Solution

Adoptive Solution

25/07/2021 17:51:01
Quote Anchor link
Moest even puzzelen hoe die array in elkaar zat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
$nested
= array (
    'body' => array (
        "contactName" => "Bart R",
        "contactPhone" => "+324",
        "contactEmail" => "info@webdesignbart.be",
        "contactLanguage" =>"nl",
        "regionId" => 5,
        "passengers" => array(
            array(
            "name" => "Bart",
            "child" => "",
            "weight" => "90",
            "paymentType" => "COUP",
            "paymentReference" => "1234 5678 90"
            ),
            array(
            "name" => "Annelies",
            "child" => "",
            "weight" => "70",
            "paymentType" => "WIRE"
            ),

            array(
            "name" => "Amber",
            "child" => "on",
            "weight" => "35",
            "paymentType" => "WIRE"
            )
        )
    )
);


echo '<pre>' . print_r( $nested, TRUE ) . '</pre>';
?>


<pre>Als 'child' empty is, moet het de boolean false dragen;
Als 'child' de een string on bevat, moet het de boolean true dragen;
'Weight' moet een integer zijn, geen string, dus zonder haakjes.
</pre>

<?php
foreach ( $nested['body']['passengers'] as $key => $value )
{

    echo '<pre>' . print_r( $value, TRUE ) . '</pre>';
    $nested['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE  : (boolean)TRUE;
    $nested['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
    echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
    $nested['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}


echo '<pre>' . print_r( $nested, TRUE ) . '</pre>';

foreach ( $nested['body']['passengers'] as $key => $value )
{

    echo 'Kind ' . $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is kind' : 'is geen kind' ) . '<br />';
    echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
}

?>
Gewijzigd op 26/07/2021 09:25:13 door Adoptive Solution
 
Bart Raymakers

Bart Raymakers

25/07/2021 18:03:46
Quote Anchor link
Dankuwel! Straks eens proberen, ik laat je zeker weten als het gelukt is. Nogmaals bedankt!

Toevoeging op 25/07/2021 21:26:32:

Helaas, het wil niet werken. Nuja, ik begrijp de code ook maar half, dus heb ik hem gewoon geïntegreerd.

Hieronder de feitelijke plugin (WordPress), misschien kan jij zien waar het fout loopt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function piotnetforms_send_request_bart( $form_submission ) {
$regio = [
'regionId' => $form_submission['fields']['region_Id']['value'],
];

$regio = $regio[regionId]; // regio is een array!!!
$regio = intval($regio); // regio moet een integer worden

$body = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value'],
];


// begin omzetting

foreach ( $body['body']['passengers'] as $key => $value )
{
    echo '<pre>' . print_r( $value, TRUE ) . '</pre>';
    $nested['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE  : (boolean)TRUE;
    $nested['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
    echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
    $nested['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}

echo '<pre>' . print_r( $nested, TRUE ) . '</pre>';

foreach ( $body['body']['passengers'] as $key => $value )
{
    echo 'Kind ' . $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is kind' : 'is geen kind' ) . '<br />';
    echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
}

// einde omzetting


$request = [
'body' => json_encode($body),
];


$content = var_export($request, true);

$to = 'info@webdesignbart.be';
$subject = 'The subject';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $content, $headers );

}

add_action('piotnetforms/form_builder/new_record_v2', 'piotnetforms_send_request_bart');
 
Adoptive Solution

Adoptive Solution

25/07/2021 22:25:05
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
$body_origineel
= [
    'contactName' => $form_submission['fields']['contactName']['value'],
    'contactPhone' => $form_submission['fields']['contactPhone']['value'],
    'contactEmail' => $form_submission['fields']['contactEmail']['value'],
    'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
    'contactCity' => $form_submission['fields']['contactCity']['value'],
    'regionId' => $regio,
    'passengers' => $form_submission['fields']['passengers']['value']
];


$body = [
    "contactName" => "Bart R",
    "contactPhone" => "+324",
    "contactEmail" => "info@webdesignbart.be",
    "contactLanguage" =>"nl",
    "regionId" => 5,
    "passengers" => [
        [

        "name" => "Bart",
        "child" => "",
        "weight" => "90",
        "paymentType" => "COUP",
        "paymentReference" => "1234 5678 90"
        ],
        [

        "name" => "Annelies",
        "child" => "",
        "weight" => "70",
        "paymentType" => "WIRE"
        ],
        [

        "name" => "Amber",
        "child" => "on",
        "weight" => "35",
        "paymentType" => "WIRE"
        ]
    ]
];


echo '<pre>' . print_r( $body, TRUE ) . '</pre>';
?>


<pre>Als 'child' empty is, moet het de boolean false dragen;
Als 'child' de een string on bevat, moet het de boolean true dragen;
'Weight' moet een integer zijn, geen string, dus zonder haakjes.
</pre>

<?php
foreach ( $body['passengers'] as $key => $value )
{

    echo '<pre>' . print_r( $value, TRUE ) . '</pre>';
    $body['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE  : (boolean)TRUE;
    $body['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
    echo $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is een kind' : 'is geen kind' ) . '<br />';
    echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is een integer' : 'is geen integer' ) . '<br /><br />';
    $body['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}


echo '<pre>' . print_r( $body, TRUE ) . '</pre>';

foreach ( $body['passengers'] as $key => $value )
{

    echo $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is een kind' : 'is geen kind' ) . '<br />';
    echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is een integer' : 'is geen integer' ) . '<br /><br />';
}

?>
Gewijzigd op 26/07/2021 09:25:46 door Adoptive Solution
 
Bart Raymakers

Bart Raymakers

25/07/2021 23:49:43
Quote Anchor link
Bedankt voor jouw respons op dit late uur!

Als ik jouw code als separate php-file uitvoer, dan zie ik dat de waardes aangepast zijn. Onderstaande is letterlijk wat er gemaild wordt:

array ( 'body' => '{"contactName":"Bart","contactPhone":"+3247000000","contactEmail":"info@......be","contactLanguage":"nl","contactCity":"Diest","regionId":2,"passengers":[{"name":"Bart","child":"","weight":"80","paymentType":"WIRE"},{"name":"Amber","child":"on","weight":"30","paymentType":"WIRE"}]}', )


Bij het uitvoeren van mijn code lijkt de $content (zie mijn vorige bericht) ongewijzigd te blijven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
/**
 * Plugin name: Query APIs
 * Plugin URI: https://www.webdesignbart.be
 * Description: Pass information from external APIs in WordPress - json
 * Author: Bart Raymakers
 * Author URI: https://www.webdesignbart.be
 * version: 0.1.0
 * License: GPL2 or later.
 * text-domain: query-apis
 */



function piotnetforms_send_request_bart( $form_submission ) {

$regio = [
'regionId' => $form_submission['fields']['region_Id']['value'],
];


$regio = $regio[regionId]; // regio is een array!!!
$regio = intval($regio); // regio moet een integer worden

$body = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value'],
];


$request = [
'body' => json_encode($body),
];


// begin omzetting

foreach ( $request['body']['passengers'] as $key => $value )
{

    $request['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE  : (boolean)TRUE;
    $request['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
    $request['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}


// einde omzetting


$content = var_export($request, true);

$to = 'info@webdesignbart.be';
$subject = 'The subject';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $content, $headers );

}


add_action('piotnetforms/form_builder/new_record_v2', 'piotnetforms_send_request_bart');
[
/code]
Gewijzigd op 26/07/2021 08:06:25 door Bart Raymakers
 
Jan R

Jan R

26/07/2021 03:01:23
Quote Anchor link
Zou het niet beter zijn om deze contactinfo te verwijderen van dit forum.
 
Bart Raymakers

Bart Raymakers

26/07/2021 08:05:40
Quote Anchor link
Goede opmerking Jan. Ik heb mijn posts gewijzigd.
 
Adoptive Solution

Adoptive Solution

26/07/2021 09:27:18
Quote Anchor link
Verwijder de regels 33 tot/met35 en plak dit na regel 46 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$request = json_encode([ 'body' => $body ] );
echo $request;


En die foreach moet met $body. Niet met $request. Je kunt niet een json op die manier aanpassen.
Gewijzigd op 26/07/2021 09:37:17 door Adoptive Solution
 
Ozzie PHP

Ozzie PHP

26/07/2021 15:55:07
Quote Anchor link
Wat is dit?

(boolean)TRUE

Waarom zou je hier een boolean typecasten naar een boolean?????

En wat is dit voor constructie?

$body['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];

En waarom dit:

$request['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;

niet gewoon zo?

$request['body']['passengers'][$key]['child'] = ($value['child'] == 'on');
 
Adoptive Solution

Adoptive Solution

26/07/2021 16:33:09
Quote Anchor link
Deze regels bevatten bij nadere inspectie een overbodigheid :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$nested['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
$body['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];


Moet zijn :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$nested['body']['passengers'][$key]['weight'] = (int)$value['weight'];
$body['passengers'][$key]['weight'] = (int)$value['weight'];
Gewijzigd op 26/07/2021 16:39:33 door Adoptive Solution
 
Bart Raymakers

Bart Raymakers

26/07/2021 18:04:07
Quote Anchor link
Sorry, maar ik kan niet goed meer volgen. Welke regels zijn te vervangen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
/**
 * Plugin name: Query APIs
 * Plugin URI: https://www.webdesignbart.be
 * Description: Pass information from external APIs in WordPress - json
 * Author: Bart Raymakers
 * Author URI: https://www.webdesignbart.be
 * version: 0.1.0
 * License: GPL2 or later.
 * text-domain: query-apis
 */



function piotnetforms_send_request_bart( $form_submission ) {

$regio = [
'regionId' => $form_submission['fields']['region_Id']['value'],
];


$regio = $regio[regionId]; // regio is een array!!!
$regio = intval($regio); // regio moet een integer worden

$body = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value'],
];


// begin omzetting

foreach ( $request['body']['passengers'] as $key => $value )
{

    $request['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE  : (boolean)TRUE;
    $request['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
    $request['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}


// einde omzetting

$request = json_encode([ 'body' => $body ] );
echo $request;


$content = var_export($request, true);

$to = 'info@webdesignbart.be';
$subject = 'The subject';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $content, $headers );

}


add_action('piotnetforms/form_builder/new_record_v2', 'piotnetforms_send_request_bart');[/code]
 
Ward van der Put
Moderator

Ward van der Put

27/07/2021 07:46:39
Quote Anchor link
Ik heb niet de indruk dat je doorziet wat je precies doet, want je gebruikt $form_submission['fields'] en $request['body'] door elkaar, hoewel die beide hetzelfde veld 'passengers' lijken te bevatten. Controleer die beide eens met var_dump(), zodat je ziet wat erin zit.

Waarom wil je de string 'on' vervangen door de boolean true als je vervolgens de ingevulde formuliergegevens gaat e-mailen? Dan kun je beter child vervangen door kind en 'on' door 'ja' in het HTML-formulier.
 
Adoptive Solution

Adoptive Solution

27/07/2021 10:36:38
Quote Anchor link
Doe het zo :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
// begin omzetting

foreach ( $body['passengers'] as $key => $value )
{
    $body['passengers'][$key]['child']  = $value['child'] == '' ? FALSE  : TRUE;
    $body['passengers'][$key]['child']  = $value['child'] == 'on' ? TRUE : FALSE;
    $body['passengers'][$key]['weight'] = (int)$value['weight'];
}

// einde omzetting

$request = json_encode([ 'body' => $body ] );
echo $request;


Het resultaat ziet er zo uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
{"body":{"contactName":"Bart R","contactPhone":"+32.....585","contactEmail":"info@webdesignbart.be","contactLanguage":"nl","regionId":5,"passengers":[{"name":"Bart","child":false,"weight":90,"paymentType":"COUP","paymentReference":"1234 5678 90"},{"name":"Annelies","child":false,"weight":70,"paymentType":"WIRE"},{"name":"Amber","child":true,"weight":35,"paymentType":"WIRE"}]}}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.