2011-09-16 2 views
0

Comment obtenir une valeur renvoyée par une méthode objet et la placer dans un tableau. Les codes sont les suivants:Ajout de valeurs à un tableau

$additionalTestConfirmation = array(); 

$additionalTests = $this->getAdditionalTestsSelected(); 


foreach($additionalTests as $availableTest) 
{ 
    $additionalTestConfirmation = $availableTest->getName(); 

} 

$appointment = $this->getAppointment(); 

$tokens = array(
    '%DATE%' => $this->getAppointment()->getDate(), 
    '%LOCATION%' => $this->getAppointment()->getLocation(), 
    '%TIME%' => $this->getTime(), 
    '%ROOM%' => $this->getRoom(), 
    '%NAME%' => ($this->getUser() ? $this->getUser()->getFullName() : null), 
    '%TZ%' => $this->getAppointment()->getShowTimeZone() ? $this->getAppointment()->getTimeZone() : '', 
    '%AdditionalTestsSelected%' => $additionalTestConfirmation, 
); 

Pour les codes ci-dessus, je reçu un message d'erreur système: Avis: Array à la conversion de chaîne dans/Users/alexhu/NetBeansProjects/ménagerie/svn/trunk/apps/frontend/modules /legacy/legacy_lib/lib/classes/AppointmentTime.php à la ligne 379. Comment éviter cela et obtenir la valeur retournée $ availableTest-> getName() que je veux. grâce

+0

Qu'est-ce que la ligne 379? Qu'est-ce que votre question a à voir avec votre question? – hakre

+0

Vous avez posé des questions sur chaque étape de ce que vous faites depuis 2 jours maintenant. Puis-je vous suggérer d'apprendre PHP, puis revenir quand vous avez des problèmes bien définis? –

+0

Les éditeurs de texte (par exemple, vim, emacs) peuvent afficher les numéros de ligne lors de l'édition, ce qui est très utile si vous voulez savoir par exemple le numéro de ligne 379 (en particulier si vous souhaitez afficher le code approprié une question SO). Passez du temps à développer votre expertise avec votre éditeur de texte, et vous rendrez la vie plus facile en tant que programmeur. – Peter

Répondre

0

Lorsque vous attribuez des éléments à un tableau, vous devez soit spécifier un index, ou utiliser des crochets vides ([]) pour ajouter un élément:

foreach($additionalTests as $availableTest) { 
    $additionalTestConfirmation[] = $availableTest->getName(); 
    // or array_push($additionalTestConfirmation, $availableTest->getName()); 
    // see: http://us3.php.net/array_push 
} 

Voir la documentation pour plus: http://php.net/manual/en/language.types.array.php

EDIT

en outre, sur cette ligne:

'%AdditionalTestsSelected%' => $additionalTestConfirmation, 

... vous passez un tableau dans cet index. Si le code afterword s'attend à ce que ce soit une chaîne, cela pourrait causer les erreurs. * Cela ne provoque pas l'erreur - il est parfaitement acceptable de placer un tableau dans un autre tableau. Comme je l'ai mentionné, cependant, cela dépend vraiment de ce que le code qui utilise le tableau $tokens fera et attendra. Si elle attend une chaîne de caractères pour l'indice AdditionalTestsSelected, vous pourriez avoir besoin de le faire:

'%AdditionalTestsSelected%' => implode(',', $additionalTestConfirmation) 

... pour faire la valeur d'une liste délimitée par des virgules.

Notez également, à la fin de cette ligne, vous avez une virgule supplémentaire.

+0

merci pour votre réponse. Mais j'ai toujours l'erreur. Je pense qu'il s'agit de '% AdditionalTestsSelected%' => $ additionalTestConfirmation –

+0

S'il vous plaît voir la modification. –

+0

merci beaucoup. J'ai résolu le problème –

0
foreach($additionalTests as $availableTest) 
{ 
    $additionalTestConfirmation[] = $availableTest->getName(); 

} 

après votre commentaire que je vous propose ceci:

$appointment = $this->getAppointment(); 

$token = array(
    '%DATE%' => $appointment->getDate(), 
    '%LOCATION%' => $appointment->getLocation(), 
    '%TIME%' => $this->getTime(), 
    '%ROOM%' => $this->getRoom(), 
    '%NAME%' => ($this->getUser() ? $this->getUser()->getFullName() : null), 
    '%TZ%' => $appointment->getShowTimeZone() ? $appointment->getTimeZone() : '' 
); 

$tokens = array(); 

$additionalTests = $this->getAdditionalTestsSelected(); 

foreach($additionalTests as $availableTest) 
{ 
    $token['%AdditionalTestsSelected%'] = $availableTest->getName(); 
    $tokens[] = $token; 
} 

// here comes logic for all tokens 
+0

Je reçois toujours le même message d'erreur. La chose la plus importante est de mettre la bonne valeur dans le tableau $ tokens, et pas seulement la valeur de $ availableTest-> getName() –

+0

il y a un problème de logique. Vous avez plusieurs "availableTest", mais seulement une entrée dans "tokens". Donc soit vous bouclez la procédure complète dans "foreach ($ additionalTests as ...", soit vous créez un tableau de jetons. – roselan

+0

merci, j'ai résolu le problème –

1

Pour ajouter chaque $ availableTest-> getName() au tableau additionalTestConfirmation de $, vous devez utiliser [] sur votre tableau et la opérateur d'affectation =

foreach($additionalTests as $availableTest) 
{ 
    $additionalTestConfirmation[] = $availableTest->getName(); 

} 

Vous pouvez également utiliser la fonction array_push

+0

Je reçois toujours le même message d'erreur: Array à la conversion de chaîne dans/Utilisateurs/alexhu/NetBeansProjects/menagerie/svn/tronc/apps/frontend/modules/héritage /legacy_lib/lib/classes/AppointmentTime.php à la ligne 379 –