modifier le contenu d'un array multidimensionnel
Bonjour,
Ma question me semble d'une stupidité déconcertante mais pas moyen de me débloquer le cerveau!
Je parcours des flux XML, et pous chaque flux je récupère son nom et la quantité qu'il contient.
A chaque fois que je tombe sur un nom déjà présent dans le tableau, je souhaite "fusionner" les contenus, donc en gros calculer le total des quantités regroupées, et incrémenter le nombre d'occurences de 1.
Sinon, j'ajoute une ligne dans mon tableau... (cette partie fonctionne donc je ne vais pas vous embêter avec!)
Je construit donc un tableau comme ceci :
Code:
1 2 3 4 5 6 7 8 9
|
$t_references = array
(
"$v_nom_flux" => array
(
"nb_occurences" => $v_occurences,
"nb_total_docs" => $v_total_documents
)
); |
Voici le script que j'ai pondu, et qui donc ne fonctionne pas:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
$v_index = key($t_references);
while($v_nom_flux = current($t_references)){
if(strcasecmp($v_index, $v_nom_court_flux) == 0){
$v_occurences = $v_occurences + 1;
$v_total_documents = $v_total_documents + $v_nb_docs;
echo "Présent dans le tableau <br/>";
echo "Vérification : $v_occurences - $v_total_documents <br/>";
//modifier un flux de données dans le tableau LE PROBLEME
$t_references_remplace["nb_occurences"]=$v_occurences;
$t_references_remplace["nb_total_docs"]=$v_total_documents; echo "<br/> Modification d'une entrée : <br/>";
var_dump($t_references);
break;
}else{ |
J'ai également essayé ceci... (le résultat que je vous affiche plus loin provient de ce script
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
$v_index = key($t_references);
while($v_nom_flux = current($t_references)){
if(strcasecmp($v_index, $v_nom_court_flux) == 0){
$v_occurences = $v_occurences + 1;
$v_total_documents = $v_total_documents + $v_nb_docs;
echo "Présent dans le tableau <br/>";
echo "Vérification : $v_occurences - $v_total_documents <br/>";
//modifier un flux de données dans le tableau LE PROBLEME
$v_modification = &$t_references["$v_nom_flux"];
$v_modification["nb_occurences"]=$v_occurences;
$v_modification["nb_total_docs"]=$v_total_documents;
$t_references["$v_nom_flux"]=$v_modification;
var_dump($t_references);
break;
}else{ |
Je parcours 3 flux, dont 2 qui portent le même nom et voici le résultat de mes mouchards (désolé pour le pâté d'autant plus que c'est très moyennement lisible...)
Citation:
nom : fichier_type1_00001
nombre : 4997
nom court : fichier_type1
Ajout de la première entrée: //c'est effectivement la première entrée dans le tableau
array(1) { ["fichier_type1
"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } }
nom : fichier_type1_00002
nombre : 5000
nom court : fichier_type1
Présent dans le tableau
Vérification : 2 - 5000 //Ca devrait être 2 - 9997
array(2) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> &array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> int(5000) } }
nom : fichier_type2_00001
nombre : 1786
nom court : fichier_type2
Pas présent dans le tableau
Pas présent dans le tableau
Ajout d'une nouvelle entrée dans le tableau :
array(3) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> &array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> int(5000) } [""]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#97 (1) { [0]=> string(4) "1786" } } }
nom : fichier_type3_00001
nombre : 4984
nom court : fichier_type3
Ajout de la première entrée: //?????
array(4) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> &array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> int(5000) } [""]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#97 (1) { [0]=> string(4) "1786" } } ["fichier_type3"]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#1 (1) { [0]=> string(4) "4984" } } }
Je peux ainsi constater que ma somme ne se fait pas ...
De plus fichier_type2 n'apparait pas dans les clé du tableau... bizarre!
Le premier script donnait comme résultat (je ne vous met que la fin, à partir du dernier flux):
Citation:
nom : fichier_type3_00001
nombre : 4984
nom court : fichier_type3
Ajout de la première entrée:
array(3) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } [""]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#97 (1) { [0]=> string(4) "1786" } } ["fichier_type3"]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#1 (1) { [0]=> string(4) "4984" } } }
Bref, je ne m'en sort pas trop, si quelqu'un avait une petite idée ou un lien vers un tuto qui parle de ça! Merci bien!