2016-05-11 13 views
1
のカール

で送信された多次元配列を印刷:トラブル私はこのような配列を持っているPHP

Array ([10209064245580796] => Array ([0] => Array ([hashed_token] =>) [1] => Array ([password] =>) [2] => Array ([email] => [email protected])) [10207252567926988] => Array ([0] => Array ([hashed_token] =>) [1] => Array ([password] => 716b64c0f6bad9ac405aab3f00958dd1) [2] => Array ([email] => [email protected]))) 

私はこの方法を作った: $usersは次のようになります。

Array ([0] => 10209064245580796 [1] => 10207252567926988) 

$arrayOfFieldsは次のようになりますこれは:

Array ([0] => hashed_token [1] => password [2] => email) 

So:

$array=array(); 
foreach($users as $user){ 
    $array[$user]=array(); 
    foreach($arrayOfFields as $getFieldValue) { 
     $user = '' . $user . ''; 
     $query = "SELECT `$getFieldValue` FROM $table WHERE `$column`= $user"; 
     $result = $mysqli->query($query); 
     $fetchResult = $result->fetch_assoc(); 
     $getFieldValue = '' . $getFieldValue . ''; 
     $finalValue = $fetchResult[$getFieldValue]; 
     array_push($array[$user] ,array($getFieldValue=>$finalValue)); 
    } 
} 

そして、私はこのコードでcURLを経由して送信していた最初の例では上記のように、この2 foreachs後、私は配列$arrayを得る:

$data = array('facebook_app_id' => $facebook_app_id, 'facebook_ids' => $facebook_ids,'values_for_custom_fields' => $array); 

    $endpoint_url = 'https://servis-racunara.net/api/index.php'; 
    $curl = curl_init($endpoint_url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Authorization: Token ".$token)); 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
    $curl_response = curl_exec($curl); 
    curl_close($curl); 

    //you do not need to print results, this is just for debugging purposes 
    $result = $curl_response; 
    print_r($result); 

このエンドポイントhttps://servis-racunara.net/api/index.phpのだから、内部のスクリプト(上私は私がprint_r($_POST)を行うとき、私はこのような配列を取得)$arrayを含め、いくつかのデータを送信していた:

Array ([facebook_app_id] => 1512823699024883 [facebook_ids] => 10209064245580796,10207252567926988[values_for_custom_fields] => Array) 

したがって、キーvalues_for_custom_fieldsの下には、処理する必要がある配列$arrayが格納されています。私はprint_r($_POST['values_for_custom_fields']);を行うと、私はこれをしようとすると、それだけで 'アレイ' を言う、と:

foreach($_POST['values_for_custom_fields'] as $anything) { 
     echo($anything);//same with print_r 
} 

Serverは言う:

警告:無効な引数がforeachのために供給される()

任意のアイデア?

+0

[この](http://stackoverflow.com/questions/13665532/how-to-get-array-value-as-return-value-on-curl-php-request)見ての可能性のある重複[this](http://stackoverflow.com/questions/3772096/posting-multidimensional-array-with-php-and-curl)スレッドも –

答えて

2

問題は、データを送信するために間違った形式を選択したことです。あなたのコードではフォーム提出書式、つまりapplication/x-www-form-urlencoded(デフォルトではCURLで使用されています)を使用します。 form submission formatsのどちらも、ネストされたデータ(配列)をサポートしていません。言い換えれば、は、POSTリクエストでネストされた配列をフォームエンコードされたデータとして送信できません。

他の形式を使用してデータを送信する必要があります。どんなレベルのネスティングも可能にする普及したフォーマットJSONを使うことを提案します。この場合、エンドポイント・スクリプトでデータを受信するときに、データを送信およびデコードする前にJSONエンコードする必要があります。また、適切なContent-typeヘッダーを要求のために設定する必要があります:application/json

... 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Authorization: Token ".$token, 
    "Content-type: application/json" 
)); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
... 
関連する問題