1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <?php
class Signalement {
public $numero; public $nom;public $type; public $note;
public function __construct($numero_,$nom_,$type_,$note_){
$this->numero=$numero_; $this->nom=$nom_;$this->type=$type_;$this->note=$note_;
}
//getters
public function getNumero(){return $this->numero;}
public function getNom(){return $this->nom;}
public function getType(){return $this->type;}
public function getNote(){return $this->note;}
//setters
public function setNom($nom_){$this->nom=$nom_;}
public function setType($type_){$this->type=$type_;}
public function setNote($note_){$this->note=$note_;}
}
//Supposons que les données csv et db sont comme suite :
$dbRecords=[
new Signalement (245,"café","boisson",5),
new Signalement (655,"brie","fromage",6),
new Signalement (158,"banane","fruit",3),
new Signalement (954,"poulet","viande",4)
];
$csvRecords=[
["Identifiant de la fiche"=>655,"Nom de la structure"=>"pates","Commentaire Type de cas"=>"feculant","note structure"=>8],
["Identifiant de la fiche"=>158,"Nom de la structure"=>"kiwi","Commentaire Type de cas"=>"fruit","note structure"=>2],
["Identifiant de la fiche"=>158,"Nom de la structure"=>"jus d'orange","Commentaire Type de cas"=>"boisson","note structure"=>4]
];
$csvFirstElement=array_values($csvRecords)[0];
$dbFirstElement=array_values($dbRecords)[0];
$combinedKeys = array_combine(array_keys($csvFirstElement),array_keys(get_object_vars($dbFirstElement)));
$filteredRows=array_filter($dbRecords,function($a) use($csvRecords){
return in_array($a->getNumero(),array_column($csvRecords,"Identifiant de la fiche"));
});
foreach($filteredRows as $key => &$signal){
foreach($combinedKeys as $csvColName=>$dbColName){
$similaire=array_column(
array_filter($csvRecords,function($v) use ($signal){
return $v["Identifiant de la fiche"]==$signal->getNumero();
})
,$csvColName);
$getMethodName="get".ucfirst($dbColName);$setMethodName="set".ucfirst($dbColName);
array_push($similaire,$signal->$getMethodName());
$similaire=array_unique($similaire);
if($dbColName!="numero")
if( count($similaire)>1) $signal->$setMethodName(implode(" , ",$similaire));
else unset($filteredRows[$key]->$dbColName);// Ou bien réinitialiser la valeur à null $signal->$setMethodName(null)
}
}
var_dump($filteredRows); |
Partager