2016-09-19 2 views
0

Ich bin nicht! Ein PHP-Entwickler und immer noch diese Aufgabe endete auf meinem Schreibtisch. Erstellen eines Berichts für den Verteiler Ich habe meine Anfrage gestellt und meine Daten rausgebracht. Aber ich habe Probleme, das Array in eine CSV-formatierte Zeichenfolge zu konvertieren, die ich den Clients bereitstellen kann.PHP-Array zu CSV-String

Das Ergebnis erhalte ich:

array(1) { 
    [0]=> 
    object(stdClass)#351 (9) { 
    ["id"]=> 
    string(36) "cc23b3b9-7e38-11e6-b6fa-0a1bcd0d7087" 
    ["master_user_id"]=> 
    string(36) "84d55a15-5256-2ee6-1d31-8f3ccbc6f223" 
    ["company_name"]=> 
    string(7) "Tellest" 
    ["price_per_register"]=> 
    string(1) "0" 
    ["num_of_registers"]=> 
    string(1) "1" 
    ["price"]=> 
    string(5) "18625" 
    ["kickback_percent"]=> 
    string(4) "0.25" 
    ["kickback"]=> 
    string(4) "4656" 
    ["distributor_report_id"]=> 
    string(3) "260" 
    } 
} 

ich viele Sachen wie versucht: Headers erste

fputcsv($handle, array('id', 'master_user_id', 'company_name', 'price_per_register', 'price', 'kickback_percent', 'kickback', 'distributor_report_id'),','); 

(was gearbeitet hat) und dann

while($row = $results->fetch()) {                                          
fputcsv(                                                
    $handle, // The file pointer                                           
    array($row['id'], $row['master_user_id'], $row['company_name'], $row['price_per_register'], $row['price'], $row['kickback_percent'], $row['kickback'], $row['distributor_report_id']), // The fields 
    ',' // The delimiter                                             
    );                                                 
}                                                  

Hoffnung jeder kann gib mir einen netten Zeiger was ich falsch mache. Ich habe dies in den Protokollen gesehen: HINWEIS: PHP-Nachricht: PHP Schwerwiegender Fehler: Aufruf einer Memberfunktion fetch() für Array in/usr/share/nginx/html/src/app/Rest/Controllers/DistributorReportController.php auf der Leitung 54

+0

$ roh ist ein Array und Elemente sind Objekte, so Schleife Array mit foreach und Adress Elemente mit Operator -> –

Antwort

0

Hallo Thx alle für die tolle Rückmeldung. Sie alle führen mich in die richtige Richtung. Mein Ergebnis:

$handle = fopen('php://output', 'w+');                                   
fputcsv($handle, array('id', 'master_user_id', 'company_name', 'price_per_register', 'num_of_registers' , 'price', 'kickback_percent', 'kickback', 'distributor_report_id'),','); 

$count = count($results);                                      

for($i = 0; $i < $count; $i++) {                                    
    $object = $results[$i];// iterate through the array of objects                            
    echo implode(",",$object);                                     
    echo "\n";                                         
}                                            
fclose($handle); 

Ich habe euch alle upvoted :)

1

Zuerst müssen Sie die Objekte aus dem Array zu extrahieren, dann durch die Objekte iterieren die csv zu füllen:

$array = //a collection of what you show at the top off post - I'm assuming more than 1 member 
$count = count($array); 

for($i = 0; $i < $count; $i++) { 

    $object = $array[$i];// iterate through the array of objects 

    foreach($object as $obj) { 
     // in here populate the csv with this object's members, use object notation with -> 

     $fields = array($obj->id, $obj->master_user_id, $obj->company_name, $obj->price_per_register, $obj->price, $obj->kickback_percent, $obj->kickback, $obj->distributor_report_id); 

     fputcsv($handle, $fields, ',');// comma is the default separator 

    }//end foreach 
}//end for loop 

cSV-Datei jetzt ausgefüllt ist, so fclose()

2

Zuerst es verwenden sieht so aus als hättest du schon array, also brauchst du nicht fetch(), als zweites versuchen Sie Zugriff auf Objekteigenschaft ($row->id) als Array-Element ($row['id']). Hier ist ein Beispiel, das funktionieren sollte:

foreach($results as $row){                                         
    fputcsv(                                                
     $handle, // The file pointer                                           
     array($row->id, $row->master_user_id, $row->company_name, $row->price_per_register, $row->price, $row->kickback_percent, $row->kickback, $row->distributor_report_id), // The fields 
     ',' // The delimiter                                             
     );                                                 
    } 
2

Sie erhalten ein Array von Objekten, so dass Sie die Abrufmethode für ein Array nicht verwenden können.

$rows = $results->fetch(); // or whatever else you do to get the presented array :) 

foreach ($rows as $row) {                                        
    fputcsv($handle,         
    $row->id, $row->master_user_id, $row->company_name, $row->price_per_register, $row->price, $row->kickback_percent, $row->kickback, $row->distributor_report_id), ',');                                                
}    
Verwandte Themen