Добавление данных массива в скручиваемые поля записей - PullRequest
0 голосов
/ 16 ноября 2018

Это поля сообщения запроса CURL. Мне нужно добавить несколько идентификаторов округов к этому CURLOPT_POSTFIELDS: -

CURLOPT_POSTFIELDS => '{
  "fields": [
    {
      "field_type": "countries",
      "field_value":[

        {
            "country_id": '.$id.' ,
            "match_type": "exact"
        }
        ]
    }
  ]
}'

У меня есть массив идентификаторов стран, и мне нужно создать этот блок для всех: -

{
                "country_id": '.$id.' ,
                "match_type": "exact"
            }

так что если у меня есть 5 идентификаторов страны, это должно выглядеть как

CURLOPT_POSTFIELDS => '{
      "fields": [
        {
          "field_type": "countries",
          "field_value":[

            {
                "country_id": '.$id[0].' ,
                "match_type": "exact"
            },
            {
                "country_id": '.$id[1].' ,
                "match_type": "exact"
            },
            {
                "country_id": '.$id[2].' ,
                "match_type": "exact"
            },
            {
                "country_id": '.$id[3].' ,
                "match_type": "exact"
            },
            {
                "country_id": '.$id[4].' ,
                "match_type": "exact"
            }
            ]
        }
      ]
    }'

Количество стран может меняться каждый раз. Поэтому мне нужно использовать цикл for внутри этого, чтобы сделать это динамически. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Чрезвычайно нежелательно пытаться вручную создать строку json в цикле.Вы должны создать действительный массив, а затем преобразовать его в json, когда закончите.

Чтобы построить нужный массив результатов, просто вставьте новые данные в соответствующий подмассив.

Код: ( Демо )

$country_ids = range(1,5);
$result['fields'][0]['field_type'] = "countries";
foreach ($country_ids as $id) {
    $result['fields'][0]['field_value'][] = ["country_id" => $id, "match_type" => "exact"];
}

var_export($result);
echo "\n---\n";
echo json_encode($result, JSON_PRETTY_PRINT);  // this resembles your posted data

Вывод (как в массиве, так и в формате json):

array (
  'fields' => 
  array (
    0 => 
    array (
      'field_type' => 'countries',
      'field_value' => 
      array (
        0 => 
        array (
          'country_id' => 1,
          'match_type' => 'exact',
        ),
        1 => 
        array (
          'country_id' => 2,
          'match_type' => 'exact',
        ),
        2 => 
        array (
          'country_id' => 3,
          'match_type' => 'exact',
        ),
        3 => 
        array (
          'country_id' => 4,
          'match_type' => 'exact',
        ),
        4 => 
        array (
          'country_id' => 5,
          'match_type' => 'exact',
        ),
      ),
    ),
  ),
)
---
{
    "fields": [
        {
            "field_type": "countries",
            "field_value": [
                {
                    "country_id": 1,
                    "match_type": "exact"
                },
                {
                    "country_id": 2,
                    "match_type": "exact"
                },
                {
                    "country_id": 3,
                    "match_type": "exact"
                },
                {
                    "country_id": 4,
                    "match_type": "exact"
                },
                {
                    "country_id": 5,
                    "match_type": "exact"
                }
            ]
        }
    ]
}
0 голосов
/ 16 ноября 2018

Вы могли бы сделать что-то вроде этого.

$id = array(1,2,3,4,5,6); // Your IDS
$numberOfIds = count($id);  //Total number of ids (no comma after last entry)  
$finalString = ""; // The final string for output.
foreach($id as $key => $value){

    $finalString .= '{
            "country_id": '.$value.',
            "match_type": "exact"
        }';
    if($key < $numberOfIds-1){
       $finalString .= ","; 
    }
}

$curlStuff = '{
  "fields": [
    {
      "field_type": "countries",
      "field_value":[
            '.$finalString.'

        ]
    }
  ]
}';
var_dump($curlStuff);

даст

string(681) "{
  "fields": [
    {
      "field_type": "countries",
      "field_value":[
            {
            "country_id": 1,
            "match_type": "exact"
        },{
            "country_id": 2,
            "match_type": "exact"
        },{
            "country_id": 3,
            "match_type": "exact"
        },{
            "country_id": 4,
            "match_type": "exact"
        },{
            "country_id": 5,
            "match_type": "exact"
        },{
            "country_id": 6,
            "match_type": "exact"
        }

        ]
    }
  ]
}"

Чтобы вы могли запустить

CURLOPT_POSTFIELDS => $curlStuff;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...