Page 1 sur 1

Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 11:10
par Nathamis
Bonjour,
comme dit dans le titre, j'aimerai fusionner deux tableau en un seul. En soit se n'est pas un problème, mais c'est la façon dont je voudrai qu'ils se fusionnent qui me pose un tout petit chouilla problème.

Déjà voici mes deux table :
$display = array(
            'utc_time' => array('1','1','1','2','2','2','3','3','3'),
            'destination' => array('JP','NATH','ALINE','JP','NATH','ALINE','JP','NATH','ALINE')
);
 
$response = array(
            'originator' => array('JP','NATH','ALINE','JP','NATH','ALINE','JP','NATH','ALINE'),
            'description' => array('1','0','4','3','2','0','3','1','4')
);
et je voudrai donc que ces deux tableau aille dans le tableau result :
$result = array(
            'utc_time' => array(),
            'point' => array()
);
à la fin le tableau result doit ressembler à ça :

Array ( [utc_time] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [point] => Array ( [0] => Array ( [JP] => 1 [NATH] => 0 [ALINE] => 4 ) [1] => Array ( [JP] => 3 [NATH] => 2 [ALINE] => 0 ) [2] => Array ( [JP] => 3 [NATH] => 1 [ALINE] => 4 ) ) )

Donc voilà le code que j'ai fait :
for ($i=0; $i < count($display['utc_time']); $i++) {
    for ($j=0; $j < count($response['originator']); $j++) {
        if ($i == $j) {
 
            $result['utc_time'][] = $display['utc_time'][$i];
 
            $new = array($display['destination'][$i] => $response['description'][$i]);
 
             
            if($i==0){
                //$new = array($display['destination'][$i] => $response['description'][$i]);
                array_push($result['point'], $new);
            }
            if ($i!=0 && $display['utc_time'][$i] == $display['utc_time'][($i-1)]){
                $second = array($display['destination'][$i] => $response['description'][$i]);
 
                $result['point'][] = array_merge($result['point'][($i-1)], $second);
            }
            if ($i!=0 && $display['utc_time'][$i] != $display['utc_time'][($i-1)]){
                array_push($result['point'], $new);
            }
        }
    }
}
 
$result['utc_time'] = array_unique($result['utc_time']);
array_splice($result['utc_time'], count($result['utc_time']));
 
print_r($result);
Mais voilà ce que ça me donne :

Array ( [utc_time] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [point] => Array ( [0] => Array ( [JP] => 1 ) [1] => Array ( [JP] => 1 [NATH] => 0 ) [2] => Array ( [JP] => 1 [NATH] => 0 [ALINE] => 4 ) [3] => Array ( [JP] => 3 ) [4] => Array ( [JP] => 3 [NATH] => 2 ) [5] => Array ( [JP] => 3 [NATH] => 2 [ALINE] => 0 ) [6] => Array ( [JP] => 3 ) [7] => Array ( [JP] => 3 [NATH] => 1 ) [8] => Array ( [JP] => 3 [NATH] => 1 [ALINE] => 4 ) ) )

et là j'avoue être un chouilla bloqué,

alors si quelqu'un peut m'aider se serai top !

Merci d'avance !

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 11:32
par telnes
hello

mettre des fonction (count) dans des boucles c'est pas terrible pour les perfs (le calcule est fait à chaque iteration)
il y a foreach() qui parcour les tableaux

ensuite c'est quoi le lien entre utl dest origi et desc ? personnellement je n'ai pas compris

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 11:36
par Nathamis
Merci pour ta réponse,
je doit faire ces liens parce qu'ensuite je vais en avoir besoin pour faire un graphique.
A la base les informations des tableaux proviennent de différentes parties d'un fichier XMl

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 11:42
par telnes
ok mais ca explique pas le lien entre les données ?

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 11:48
par Nathamis
en faite le premier tableau ça correspond aux temps d'affichage d'une question, donc au temps 1 ya une question qui été envoyer à JP, NATH et ALINE.
Ensuite le deuxième tableau ca correspond aux réponse qu'ils on donnée, donc pour le temps 1 JP a donné la réponse 1, Nath a donné la réponse 0 et Aline la réponse 4.

Et du coup je voudrai réunir tous ces éléments dans un seul est même tableau de cette façon :
Array ( [utc_time] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [point] => Array ( [0] => Array ( [JP] => 1 [NATH] => 0 [ALINE] => 4 ) [1] => Array ( [JP] => 3 [NATH] => 2 [ALINE] => 0 ) [2] => Array ( [JP] => 3 [NATH] => 1 [ALINE] => 4 ) ) )

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 13:47
par telnes
hello

perso je pense que les données récupérées ne sont pas dans la bonne forme.

voici un code qui permet de commencer à faire ce que tu veux.

<?php

$display = array(
            'utc_time' => array('1','1','1','2','2','2','3','3','3'),
            'destination' => array('JP','NATH','ALINE','JP','NATH','ALINE','JP','NATH','ALINE')
);
 
$response = array(
            'originator' => array('JP','NATH','ALINE','JP','NATH','ALINE','JP','NATH','ALINE'),
            'description' => array('1','0','4','3','2','0','3','1','4')
);

$point=array();
$players=array();
$tmp=1;
$result['utc_time'][]=$tmp;
foreach($display["utc_time"] as $key=>$time){
	
	if($time != $tmp){
		$result['utc_time'][]=$tmp;
		$tmp++;
	}

	$user = $display['destination'][$key];
	$players[$tmp][$user]=$key; //valeure provisoir pour tracer
}

print_r($players);

$nb=count($result['utc_time']);
echo $nb;
$counter=0;
$index=0;
$res=array();
foreach($response['originator'] as $key=>$value){

	if($counter%$nb == 0){
		
		$index++;
	}
	$p=$response['description'][$key];
	$res[$index][$value]=$p;	
	$counter++;
}

print_r($res);

Code : Tout sélectionner

Array ( [1] => Array ( [JP] => 0 [NATH] => 1 [ALINE] => 2 ) [2] => Array ( [JP] => 3 [NATH] => 4 [ALINE] => 5 ) [3] => Array ( [JP] => 6 [NATH] => 7 [ALINE] => 8 ) ) 3 Array ( [1] => Array ( [JP] => 1 [NATH] => 0 [ALINE] => 4 ) [2] => Array ( [JP] => 3 [NATH] => 2 [ALINE] => 0 ) [3] => Array ( [JP] => 3 [NATH] => 1 [ALINE] => 4 ) )
++

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 14:26
par Nathamis
Merci,
enfin à terme utc_time se sera des temps en milliseconde et pas des 1, 2, 3
du coup ça voudrai dire qu'en key de tableau je mettrait des nombre dans ce style là 1398325139555 et qui ne se suivent pas forcèmenent.

Re: Fusionner deux tableau en un seul

Posté : 28 avr. 2014, 14:31
par telnes
hello

le problème c'est que tu n'a pas d'index unique pour chaque événement
pour JP il y a plusieurs valeurs ...

tu devrais peut etre ajouter un index unique à chaque élément et ainsi pouvoir les relier simplement par la suite

++