2013-05-03 8 views
8

मैं सरणी को सीएसवी में परिवर्तित करना चाहता हूं, मैं एसोसिएटिव सरणी को csv में परिवर्तित करने में सक्षम हूं।कॉलम हेडर के साथ सीएसवी रूपांतरण के लिए php सरणी

लेकिन हेडर प्राप्त करने में सक्षम नहीं है।

मैं चाहता हूँ हेडर के रूप में नंबर टाइप करें, DATE गतिशील

नीचे सरणी मैं converrted है।

Array 
(
    [0] => Array 
     (
      [NUMBER] => 67 
      [TYPE] => Other 
      [DATE] => 3/31/2011 
     ) 
    [1] => Array 
      (
      [NUMBER] => 87 
      [TYPE] => something 
      [DATE] => 3/28/2011 


     ) 
    [2] => Array 
      (
      [NUMBER] => 67 
      [TYPE] => Other 
      [DATE] => 3/2/2011 


     ) 

) 

कोड नीचे दिया गया है लेकिन शीर्षलेख प्राप्त करने में सक्षम नहीं है लेकिन इसके मूल्य आ रहे हैं।

<? 
$fp1 = fopen('file.csv', 'w'); 

foreach ($arr2 as $fields) 
{ 
    fputcsv($fp1, $fields); 
} 

fclose($fp1); 
?> 
+2

उपयोग [ 'array_keys'] (http://us1.php.net/ मैन्युअल/en/function.array-keys.php) हेडर में डालने के लिए शुरुआत में कार्य करें। – Jon

उत्तर

14

कुंजी प्राप्त करने के लिए बस array_keys का उपयोग करें और उन्हें पहले फ़ाइल में लिखें।

fputcsv($han, array_keys($arr[0])); 
foreach ($arr as $a) { ... } 

यह मानता है कि आपके पास एक संख्यात्मक सरणी है (और यह मानता है कि यह खाली नहीं है)। यदि arr[0] सेट करने की गारंटी नहीं है, तो आप पहले तत्व निकालने के लिए array_shift या array_slice का उपयोग कर सकते हैं। (या फिर आप के अपने पाश में एक झंडा हो सकता था या नहीं, शीर्ष लेख पहले से ही लिखा है -।। बस इसे गलत पर डिफ़ॉल्ट है, तो यह सच नहीं है, सच के लिए सेट और हैडर प्रिंट)


जबकि मैं इसमें हूं, आप array_combine का उपयोग विपरीत दिशा (एसएसवी को एसोसिएटिव सरणी के सरणी के लिए) पर जा सकते हैं।

$data = array(); 
$header = fgetcsv($han); 
while (($row = fgetcsv($han)) !== false) { 
    $data[] = array_combine($header, $row); 
} 

(नोट: यह मानता है कि आप कोई रिक्त पंक्तियों है -। एक रिक्त पंक्ति array() जो गठबंधन और data में गैर भावना डाल के साथ एक चेतावनी जारी करेगा वापसी होगी)

+0

आपकी सीएसवी सरणी कोड में विफल हो जाएगा यदि डेटा पंक्तियों में से एक हेडर के समान लंबाई नहीं है। – FKEinternet

-1

इस के लिए अच्छी तरह से काम किया मुझे शून्य $ हेडर आवंटित करने के बाद शून्य $ हेडर शून्य नहीं होगा, तो पंक्तियां का पालन करेंगी।

$header=null; 
$createFile = fopen($pathToGenerate,"w+"); 
foreach ($assocArray as $row) { 
    if(!$header){ 
     fputcsv($createFile,array_keys($row)); 
    }else{ 
    fputcsv($createFile, $row); 
    } 
} 
fclose($createFile); 

ऊपर जैसा छोटा नहीं है लेकिन मुझे यह काफी पठनीय लगता है।

+0

यह डेटा की पहली पंक्ति फ़ाइल में केवल हेडर नहीं लिखता है। यह '$ हेडर' के मान को भी नहीं बदलता है, इसलिए हेडर को डेटा की प्रत्येक पंक्ति के लिए दोहराया जाएगा, कभी भी कोई वास्तविक डेटा नहीं लिखना होगा। – FKEinternet

6

डैरेनके का जवाब पठनीय लेकिन अपूर्ण है। तो नोफेइट्स के लिए।

$pathToGenerate = 'array.csv'; // your path and file name 
    $header=null; 
    $createFile = fopen($pathToGenerate,"w+"); 
    foreach ($array as $row) { 

     if(!$header) { 

      fputcsv($createFile,array_keys($row)); 
      fputcsv($createFile, $row); // do the first row of data too 
      $header = true; 
     } 
     else { 

      fputcsv($createFile, $row); 
     } 
    } 
    fclose($createFile) 
+0

सुंदर, बहुत स्पष्ट। आपकी सहायताके लिए धन्यवाद! – Phoebe

0

रॉबर्ट क्लार्क का जवाब बहुत करीब है, लेकिन अभी भी सरलीकरण की जरूरत है: else खंड के लिए कोई ज़रूरत नहीं है:

$pathToGenerate='array.csv'; // your path and file name 
    $header=FALSE; 
    $createFile=fopen($pathToGenerate,'w+'); 
    foreach ($array as $row) 
    { if (!$header) 
     { fputcsv($createFile,array_keys($row)); 
      $header=TRUE; 
     } 
     fputcsv($createFile,$row); // write the data for all rows 
    } 
    fclose($createFile); 
संबंधित मुद्दे