使用内部数组创建 PHP 数组

问题描述 投票:0回答:1

我需要使用 json_encode 将 PHP 数组发送到端点。

但我首先需要创建 PHP 数组。

我最初创建一个 JSON 对象以发送到端点,如下所示:

$content = '{
 "event": "'. $event . '",
 "payload": {
   "email": "' . $email . '",
   "fields": { 
            "mrc_c3": "' . $mrc_c3 . '",
            "country": "' . $country . '",
            "last_name": "'.$lastName.'",
            "first_name": "' . $firstName . '",
            "mrc_date_c3": "' . $mrc_date_c3_format . '"
        },
    "overwrite": true
 }
}';

根据上一个问题,发送 JSON 对象不好,最好发送 PHP 数组并附加 json_encode 到它。

这是我创建 PHP 数组的尝试:

$arr = array('event' => $event, 'payload', 'email' => $email, 'fields', 'mrc_c3' => $mrc_c3, 'country' => $country, 'last_name' => $lastName, 'first_name' => $firstName, 'mrc_date_c3' => $mrc_date_c3_format);

我可以这样打印:

echo json_encode($arr);

我得到了这样的回应:

{"event":"donation_completed","0":"payload","email":"[email protected]","1":"fields","mrc_c3":"21.50","country":"US","last_name":"Beasley","first_name":"John","mrc_date_c3":"10\/18\/2024"}

但是我在“donation_completed”后面看到“0”,在“[email protected]”后面看到“1”,但我没有看到任何其他数字。

我做错了什么? 我正确地制作了 PHP 数组吗?

php arrays jsonencode
1个回答
0
投票

如果您使用缩进来格式化数组,每行一项,您将看到问题出在哪里:

$arr = [
    'event' => $event,
    'payload',
    'email' => $email,
    'fields',
    'mrc_c3' => $mrc_c3,
    'country' => $country,
    'last_name' => $lastName,
    'first_name' => $firstName,
    'mrc_date_c3' => $mrc_date_c3_format,
];

注意

payload
fields
项只是独立值,它们应该是子数组:

$arr = [
    'event' => $event,
    'payload' => [
        'email' => $email,
        'fields' => [
            'mrc_c3' => $mrc_c3,
            'country' => $country,
            'last_name' => $lastName,
            'first_name' => $firstName,
            'mrc_date_c3' => $mrc_date_c3_format,
        ],
    ],
];

另请注意,您不需要解码输入,然后将每个字段分配给临时变量,没有必要这样做:

$email = $payload["email"];
$firstName = $payload['fields']['first_name'];
$lastName = $payload['fields']['last_name'];
$country = $payload['fields']['country'];
$mrc_c3 = $payload['fields']['mrc_c3'];
$mrc_date_c3 = $payload['fields']['mrc_date_c3'];
$arr = [
    'event' => $event,
    'payload' => [
        'email' => $email,
        'fields' => [
            'mrc_c3' => $mrc_c3,
            'country' => $country,
            'last_name' => $lastName,
            'first_name' => $firstName,
            'mrc_date_c3' => $mrc_date_c3_format,
        ],
    ],
];

直接使用数组引用即可:

$arr = [
    'event' => $event,
    'payload' => [
        'email' => $payload["email"],
        'fields' => [
            'mrc_c3' => $payload['fields']['mrc_c3'],
            'country' => $payload['fields']['country'],
            'last_name' => $payload['fields']['last_name'],
            'first_name' => $payload['fields']['first_name'],
            'mrc_date_c3' => $payload['fields']['mrc_c3'],
        ],
    ],
];

如果入站有效负载与出站有效负载相同,那么您甚至不需要执行任何操作,只需直接使用您获得的入站有效负载即可:

$arr = [
    'event' => $event,
    'payload' => json_decode(file_get_contents('php://input'), true),
];

您想要按字段分解并重建它的唯一原因是验证内容,但您似乎没有这样做。

© www.soinside.com 2019 - 2024. All rights reserved.