2010-08-12 7 views

Répondre

0

Et voilà. Code de travail complet:

<?php 
//A helping function to insert data at any position in array. 
function array_insert($array, $pos, $val) 
{ 
    $array2 = array_splice($array, $pos); 
    $array[] = $val; 
    $array = array_merge($array, $array2); 

    return $array; 
} 

//What and where you want to insert 
$DataToInsert = '11,Shamit,Male'; 
$PositionToInsert = 3; 

//Full path & Name of the CSV File 
$FileName = 'data.csv'; 

//Read the file and get is as a array of lines. 
$arrLines = file($FileName); 

//Insert data into this array. 
$Result = array_insert($arrLines, $PositionToInsert, $DataToInsert); 

//Convert result array to string. 
$ResultStr = implode("\n", $Result); 

//Write to the file. 
file_put_contents($FileName, $ResultStr); 
?> 
3

Non, il est impossible d'insérer de nouvelles données au milieu d'un fichier, en raison de la nature du système de fichiers.
Seule l'ajout à la fin est possible. Par conséquent, la seule solution consiste à créer un autre fichier, à écrire une partie initiale de la source, à ajouter une nouvelle valeur, puis à ajouter le reste du fichier source. Et enfin renommer un fichier résultant en nom d'origine.

+0

Toute autre solution à ce problème –

+0

@Ankur J'ai ajouté une réponse à votre question. –

0

Techniquement Col. Shrapnel's answer a absolument raison.

Votre problème est que vous ne voulez pas traiter toutes ces opérations de fichiers juste pour changer certaines données. Je suis d'accord avec toi. Mais vous cherchez la solution à un mauvais niveau. Mettez ce problème à un niveau supérieur. Créez un modèle qui représente une entité dans votre base de données CSV. Modifiez l'état du modèle et appelez sa méthode save(). La méthode devrait être responsable d'écrire l'état de votre modèle au format CSV. Cependant, vous pouvez toujours utiliser une bibliothèque CSV qui résume les opérations de bas niveau pour vous. Par exemple, parsecsv-for-php vous permet de cibler une cellule spécifique:

$csv = new parseCSV(); 
$csv->sort_by = 'id'; 
$csv->parse('data.csv'); 
# "4" is the value of the "id" column of the CSV row 
$csv->data[4]['firstname'] = 'John'; 
$csv->save(); 
Questions connexes