PHP, cURL, REST-API - помещает переменную со многими значениями в массив JSON - PullRequest
0 голосов
/ 12 октября 2018

со следующим кодом

<?php
                //PHP Infos anzeigen lassen
            //phpinfo();
          header('Content-type: text/html; charset=utf-8');
            // Inhaltstyp und Zeichenkodierung für Skript festlegen
                $User_Agent = 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

            $id = $_POST["id"];             
                // Übernahme Formulareingabe
                $url = "http://hub.culturegraph.org/entityfacts/$id";
                // URL festlegen

                $request_headers[] = 'Accept: application/json';
              $request_headers[] = 'Content-Type: application/json; charset=utf-8';
              $request_headers[] = 'Accept-Encoding:    gzip, deflate, identity';
              $request_headers[] = 'Accept-Language: de,en-US;q=0.7,en;q=0.3';
              $request_headers[] = 'X-picturemaxx-api-key: key';
                $request_headers[] = "Authorization: Bearer token";
            // Optionale Anfrageoptimierungen

              $ch = curl_init($url);
              //  Initiate curl
        curl_setopt($ch, CURLOPT_USERAGENT, $User_Agent);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_ENCODING, "");
                // Anfrage optimieren
                // Execute
                $result = curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
        curl_close($ch);
        // Closing

        $data = json_decode($result, true); // Dekodiert eine JSON-Zeichenkette, Übergibt an Variable
        foreach($data['variantName'] as $alternativ) {
        echo $alternativ . " ; ";

}

Я получаю JSON-данные.Выход из переменной $ alternativ выглядит следующим образом:

"Иоганн Вольфганг Гете; Йохан Вольфганг фон Гете; Йохан Вольфганг Гете; Йохан В. Гете; Йох. Вольфг. В. Гете; Дж. Вольфганг Гете; JW v.Гете; Дж. У. Гете; Ян Вольфганг Гете; Жан Вольфганг фон Гете; Хуан Вольфганг фон Гете; Хуан Вольфганг Гете; Хуан В. Гете; Жоао Вольфганг фон Гете; Иоганн Вольфганг Гете; Йохан Вольфганг Гёте; ЙоанВольфганго Гете; Вольфанго Гете; У. фон Гете; Вольфганго Гете; Вольфанго Гете; Джов. Л. Гете; Г. Л. Гете; Гете;

и т. Д.

Далее я пытаюсь PUTзначения переменной $ alternativ в поле json-array / database'ification_element_name '

$url2 = "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/42/elements/2156013";



$dataj = array (
  'classification_element_parent_id' => 0,
  'classification_element_matchcode' => '',
  'classification_element_foreignref' => '',
  'localized' => 
  array (
    'en-us' => 
    array (
      'classification_element_name' => '',
    ),
    'de-de' => 
    array (
      'classification_element_name' => $alternativ,
    ),
  ),
);

        $data_json = json_encode($dataj);

              $ch = curl_init($url2);
              // Set the url
        curl_setopt( $ch, CURLOPT_URL, $url2 );
        curl_setopt($ch, CURLOPT_USERAGENT, $User_Agent);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);

                // Execute
                $result2 = curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                // Closing
        curl_close($ch);

Это работает. Но только одно, соответственно, последнее значение из многих исходных значений переменной $ alternativ, появляется вполе базы данных. Как изменить код, чтобы все значения переменной $ alternativ были перенесеныв поле базы данных?

1 Ответ

0 голосов
/ 12 октября 2018

вы просто зацикливаете и выводите элементы на экран и не присваиваете их переменной

foreach($data['variantName'] as $alternativ) {
    echo $alternativ . " ; ";
}

$ alternativ всегда будет последним элементом $ data ['variableName'].Вам необходимо заменить $ alternativ на $ data ['variableName'] в вашем массиве $ dataj или назначить новую переменную и использовать ее в вашем массиве $ dataj

, например:

$alternativData = array();
foreach($data['variantName'] as $alternativ) {
    echo $alternativ . " ; ";
    $alternativData[] = $alternativ;
}

$dataj = array (
  'classification_element_parent_id' => 0,
  'classification_element_matchcode' => '',
  'classification_element_foreignref' => '',
  'localized' => 
  array (
    'en-us' => 
    array (
      'classification_element_name' => '',
    ),
    'de-de' => 
    array (
      'classification_element_name' => $alternativData,
    ),
  ),
);

илиесли это должно выглядеть как 'data1; data2; data3 ..', то они используют:

$alternativData = array();
foreach($data['variantName'] as $alternativ) {
    echo $alternativ . " ; ";
    $alternativData[] = $alternativ;
}

$dataj = array (
  'classification_element_parent_id' => 0,
  'classification_element_matchcode' => '',
  'classification_element_foreignref' => '',
  'localized' => 
  array (
    'en-us' => 
    array (
      'classification_element_name' => '',
    ),
    'de-de' => 
    array (
      'classification_element_name' => implode(';', $alternativData),
    ),
  ),
);
...