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!
Moest even puzzelen hoe die array in elkaar zat.

<?php
$nested = array (
	'body' => array (
		"contactName" => "Bart R",
		"contactPhone" => "+324",
		"contactEmail" => "[email protected]",
		"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 />';
}
?>


Dankuwel! Straks eens proberen, ik laat je zeker weten als het gelukt is. Nogmaals bedankt!

[size=xsmall]Toevoeging op 25/07/2021 21:26:32:[/size]

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?

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 = '[email protected]';
$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');
 <?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" => "[email protected]",
	"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 />';
}
?>
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":"[email protected]","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.


<?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 = '[email protected]';
$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');

Zou het niet beter zijn om deze contactinfo te verwijderen van dit forum.
Goede opmerking Jan. Ik heb mijn posts gewijzigd.
Verwijder de regels 33 tot/met35 en plak dit na regel 46 :

 $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.

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');
Deze regels bevatten bij nadere inspectie een overbodigheid :

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


Moet zijn :

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

Sorry, maar ik kan niet goed meer volgen. Welke regels zijn te vervangen?

<?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 = '[email protected]';
$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');

Reageren