2016-05-11 9 views
1

Ich habe ein Array wie folgt aus:Problem mehrdimensionales Array Drucken mit cURL in PHP gesendet

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]))) 

Dass ich auf diese Weise gemacht: $users wie folgt aussieht:

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

$arrayOfFields sieht aus wie dieses:

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)); 
    } 
} 

Und danach zwei foreachs ich ein Array $array wie in erstem Beispiel oben gezeigt, dass ich über cURL mit diesem Code zu senden:

$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); 

So innen Skript dieses Endpunkts https://servis-racunara.net/api/index.php (auf das ich einige Daten bin das Senden, einschließlich $array), wenn i print_r($_POST) erhalte ich ein Array wie folgt:

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

Also, unter Schlüssel values_for_custom_fields ist $array Array gespeichert, die ich verarbeiten muss. Wenn ich print_r($_POST['values_for_custom_fields']); tun, sagt er nur 'Array', und wenn ich versuche, dies:

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

Server sagt:

Warning: Invalid argument für foreach geliefert()

Irgendwelche Ideen ?

+0

möglich Duplikat [diese] (http://stackoverflow.com/questions/13665532/how-to-get-array-value-as-return-value-on-curl-php-request) suchen auf [this] (http://stackoverflow.com/questions/3772096/posting-multidimensional-array-with-php-and-curl) Thread auch –

Antwort

2

Das Problem ist, dass Sie das falsche Format für das Senden von Daten gewählt haben. In Ihrem Code verwenden Sie Formularübergabeformat, nämlich application/x-www-form-urlencoded (wie es standardmäßig in CURL verwendet wird). Weder form submission formats unterstützt verschachtelte Daten (Arrays). Mit anderen Worten können Sie nicht verschachtelte Arrays in POST-Anforderung als formularbasierte Daten senden.

Sie müssen also ein anderes Format verwenden, um Ihre Daten zu senden. Ich würde vorschlagen, JSON zu verwenden - populäres Format, das jede mögliche Verschachtelung erlaubt. In diesem Fall müssen Sie die Daten vor dem Senden und Dekodieren JSON-encodieren - wenn Sie sie im Endpoint-Skript erhalten. Sie müssen auch Content-type Header für die Anfrage festlegen: 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)); 
...