[RESOLU] problème lors de la création d'un Array()

Petit nouveau ! | 4 Messages

21 mai 2013, 18:51

Bonjour,
Je recois un message d'erreur: Array to string conversion lors de la création de mon tableau.
Je récupère une chaine de caractères que je transforme ensuite en un tableau ($tab_php). Ensuite je dois créer avec ce tableau un Array du type:
$T=Array( array("x"=>valeur0, "y"=> valeur1), array("x"=>valeur2, "y"=> valeur3),...)
Je dois créer un tableau de cette forme pour ensuite utiliser une fonction qui crée un polygone à partir d'un tableau de ce type sous Imagick.

Voici comment je pensais faire, mais cela ne fonctionne pas. erci de votre aide.
	$tab_php = explode(",", $_POST["coordonnee"]);  //recuperation de la chaine et convertion en tableau
	//echo ($_POST["coordonnee"]);
	echo ($tab_php[2]);

$n=count($tab_php);
//echo ($n);

$tab=array();
for($i=0; $i<$n/2; $i++){
	for($j=0; $j<2; $j++){
		$tab=$tab.array("x"=> $tab_php[2*$i],"y"=>$tab_php[2*$i+$j]).",";
	}
}

$tab_final=Array($tab);

ViPHP
xTG
ViPHP | 7331 Messages

21 mai 2013, 19:31

Le souci vient du fait que tu tentes de concaténer une chaîne de caractères avec un array.
C'est comme vouloir mettre un bateau dans l'espace...

Pour rajouter une nouvelle dimension à ton array tu peux faire ainsi :
$tab[] = array(......);
Ou bien utiliser une variable d'index et l'incrémenter :
$tab[$index++] = array(....);

Petit nouveau ! | 4 Messages

21 mai 2013, 20:15

Ok, merci. Mais du coup quand j'ajoute un élément avec tab[], j'obtiens bien au final cette structure: tab= array(...), array(....),array(...)? Ou bien il faut que j'utilise une fonction comme join() pour l'obtenir?
Car en supposant que j'ai la bonne structure lors que je fais ceci:
$tab=array();
for($i=0; $i<$n/2; $i++){
	for($j=0; $j<2; $j++){
		$tab[]=array('x'=> $tab_php[2*$i],'y'=>$tab_php[2*$i+$j]);
	}
}


$tab_final=array($tab);


	//$tab_final=Array(array('x'=>  ,'y'=>  ),array('x'=>  ,'y'=> )...);    forme que doit prendre $tab_final
	
	//image_fond
    $masq = new Imagick();
	$masq->newImage(500,500, new ImagickPixel('Black'));  //$largeur,$hauteur
	$masq->setImageFormat('tif');
	//polygone
	$draw = new ImagickDraw();               
	$draw->polygon($tab_final);
	$draw->setFillColor( 'White' );
	//incorporation du polygone dans la masque
	$masq->drawImage( $draw );
 
	echo $masq->getImageBlob( );
mais fonction polygon ne marche pas. On m'affiche ce message d'erreur: Fatal error: Uncaught exception 'ImagickDrawException' with message 'Unable to read coordinate array' in /home/marie/www/site_projet/masque_manuel.php:35 Stack trace: #0 /home/marie/www/site_projet/masque_manuel.php(35): ImagickDraw->polygon(Array) #1 {main} thrown in /home/marie/www/site_projet/masque_manuel.php on line 35

Cela veut dire que $tab_final n'est pas de la bonne forme si je me trompe pas.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mai 2013, 20:19

salut,

Tu passe un tableau de tableau de tableau ce n'est pas ce qu'il faut ?

utilise un bloc try / catch pour récupérer et gérer correctement les erreurs de la classe http://www.php.net/manual/fr/language.exceptions.php



@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

21 mai 2013, 20:28

Oui il me faut un tableau de tableau, mais il y a qqch dans mon tableau de tableau qui plait pas à la fonction polygone() d'Imagick.

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mai 2013, 20:30

utilise var_dump pour l'afficher tu verra déjà s'il est conforme a ce que tu attend, par ce qula c'est un tableau qui contient un tableau qui contient DES tableaux :)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

21 mai 2013, 20:39

D'accord. En fait il ne fallait pas que je remette $tab dans un tableau. Merci pour la fonction var_dump, je ne la connaissait pas, mais elle est bien utile :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mai 2013, 20:45

:mrgreen:

de rien
Il en faut peu pour être heureux ......