PHP добавляет условия в переменную массива (WooCommerce API) - PullRequest
0 голосов
/ 26 июня 2018

Взять, к примеру, следующий фрагмент кода из документации WooCommerce API.То, что я пытаюсь сделать, это добавить некоторые условия в массиве.Например, я хочу, чтобы массив payment_details был частью $data на основе некоторого условия if.Это возможно?Как?

<?php
$data = [
    'order' => [
        'payment_details' => [
            'method_id' => 'bacs',
            'method_title' => 'Direct Bank Transfer',
            'paid' => true
        ],
        'billing_address' => [
            'first_name' => 'John',
            'last_name' => 'Doe',
            'address_1' => '969 Market',
            'address_2' => '',
            'city' => 'San Francisco',
            'state' => 'CA',
            'postcode' => '94103',
            'country' => 'US',
            'email' => 'john.doe@example.com',
            'phone' => '(555) 555-5555'
        ],
        'shipping_address' => [
            'first_name' => 'John',
            'last_name' => 'Doe',
            'address_1' => '969 Market',
            'address_2' => '',
            'city' => 'San Francisco',
            'state' => 'CA',
            'postcode' => '94103',
            'country' => 'US'
        ],
        'customer_id' => 2,
        'line_items' => [
            [
                'product_id' => 546,
                'quantity' => 2
            ],
            [
                'product_id' => 613,
                'quantity' => 1,
                'variations' => [
                    'pa_color' => 'Black'
                ]
            ]
        ],
        'shipping_lines' => [
            [
                'method_id' => 'flat_rate',
                'method_title' => 'Flat Rate',
                'total' => 10
            ]
        ]
    ]
];

print_r($woocommerce->post('orders', $data));
?>

Дело в том, что вместо того, чтобы снова определять весь массив, я хочу поставить здесь условие if:

'order' => [

if ($ payment = 'xyz') {

'payment_details' => [
    'method_id' => 'bacs',
    'method_title' => 'Direct Bank Transfer',
    'paid' => true
],

} else {

'payment_details' => [
    'method_id' => 'monopoly',
    'method_title' => 'Monopoly',
    'paid' => true
],

}

Можно ли объединить массив с помощью точек равных?. = Спасибо.

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Вы можете заранее определить payment_details и использовать его в массиве $ data.

if ($payment = 'xyz') {
    $payment_details = array (  'method_id'    => 'bacs',
                                'method_title' => 'Direct Bank Transfer',
                                'paid'         => true);
}else{
    $payment_details = array (  'method_id'    => 'monopoly',
                                'method_title' => 'Monopoly',
                                'paid'         => true);
}

$data = array (
    'order' => array(
        'payment_details' => $payment_details,
        ......
        ......
    )
);

print_r($woocommerce->post('orders', $data));
0 голосов
/ 18 июля 2018

Отвечая на мой собственный вопрос.Это то, что я искал.

$orderData = [];
            if ($payment == 'Monopoly') {
                $orderData['order']['payment_details'] = [];
                $orderData['order']['payment_details']['method_id'] = 'Monopoly';
                $orderData['order']['payment_details']['method_title'] = 'Monopoly';
                $orderData['order']['payment_details']['paid'] = true;
                $orderData['order']['status'] = 'completed';
            }
            else {
                $orderData['order']['status'] = 'pending';
            }
0 голосов
/ 26 июня 2018

"payment_details" уже является частью $ data.

Чтобы добраться до него, используйте:

$paymentDetails = $data['order']['payment_details'];

Затем вы можете отобразить его с помощью:

echo $paymentDetails['method_title'];

Если вы хотите использовать условия:

if ($paymentDetails['method_title'] === 'Monopoly money') {
    echo 'That will not work';
}

Для изменения реквизитов платежа:

$data['order']['payment_details']['method_title'] = 'Changed';

или

$data['order']['payment_details'] = ['method_title' => 'something', 'method_id' => 5, 'paid' => false];
...