【问题标题】:PHP, cURL, REST-API - PUT a variable with many values into JSON arrayPHP、cURL、REST-API - 将具有多个值的变量放入 JSON 数组
【发布时间】:2018-10-12 09:00:04
【问题描述】:

使用以下代码

<?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 的输出看起来像

"约翰·沃尔夫冈·歌德;约翰·沃尔夫冈·冯·歌德;约翰·沃尔夫冈·歌德;约翰·W·冯·歌德;约翰·沃尔夫冈诉歌德;J·沃尔夫冈·歌德;J·W·歌德;J·W·歌德;扬·沃尔夫冈·歌德;让·沃尔夫冈冯·歌德;胡安·沃尔夫冈·冯·歌德;胡安·沃尔夫冈·歌德;胡安·W·歌德;若昂·沃尔夫冈·冯·歌德;约汉·沃尔夫冈·歌德;约汉·沃尔夫冈·歌德;约安·W·歌德;I.W·歌德;沃尔夫冈戈·歌德Goethe ; Volfango Goethe ; Giov. L. Goethe ; G. L. Goethe ; Goethe ;

等等。

接下来我尝试将变量 $alternativ 的值放入 json-array/database 字段 'classification_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 的所有值都传输到数据库字段中?

【问题讨论】:

    标签: php json api curl put


    【解决方案1】:

    你只是循环和回显元素而不是将它们分配给变量

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

    $alternativ 将始终是 $data['variantName'] 的最后一个元素。 您需要在 $dataj 数组中将 $alternativ 替换为 $data['variantName'] 或 分配一个新变量并在 $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),
        ),
      ),
    );
    

    【讨论】:

    • 你好 PHPunk。抱歉,这不起作用。对于第一个解决方案,我得到的只是数据库字段中的“数组”。而对于第二个想法,我什么也得不到。
    • 哦,我有一个类型,对不起。我,将再次编辑代码。
    • 请再试一次:)
    • 我已经注意到拼写错误并更正了。之后我只得到一个空的数据库字段。没有值被接管。
    • 你能做一个 print_r( $alternativData );和一个 print_r( $dataj );并发布?
    猜你喜欢
    • 2017-09-19
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多