2010-06-24 3 views
8

Ok, donc j'ai un formulaire qui m'envoie des tableaux dans le tableau POST. J'essaie de le lire comme suit:Récupérer des données de post-array dans CodeIgniter

$day = $this->input->post("days")[0]; 

Cela ne fonctionne pas. PHP dit "inattendu" ['". Pourquoi cela ne fonctionne-t-il pas?

Je l'ai fixé par ce faisant de cette façon:

$days = $this->input->post("days"); 
$day = $days[0]; 

je fixe mon problème, je suis curieux de savoir pourquoi la 1ère voie ne fonctionne pas.

+0

Voici une discussion sur le sujet SO: http://stackoverflow.com/questions/742764/php-syntax-for-dereferencing-function-result –

Répondre

9

La déréférencement de matrice à partir d'appels de fonction n'est pas supportée par PHP. Il est implémenté dans la version de tronc SVN de PHP, donc il sera probablement dans les futures versions de PHP. Pour l'instant, vous devrez recourir à ce que vous faites maintenant. Pour les tableaux énumérés, vous pouvez également utiliser list:

list($day) = $this->input->post("days"); 

Voir: http://php.net/list

+0

Merci. Je m'en tiendrai à la façon dont je le fais maintenant. –

+0

En plus de cette réponse, S'il vous plaît vérifier cela http://stackoverflow.com/a/22652521/567854 aussi dans le cas où le tableau est un ** 'tableau associatif' ** :) – IJas

+0

Depuis PHP 5.4, la déréférence de tableau est supportée. Ce qui suit va fonctionner: '$ day = $ this-> input-> post (" days ") [0];' – liamja

7

Syntaxe comme ceci:

$day = $this->input->post("days")[0]; 

est pas pris en charge en PHP. Vous devez faire ce que vous faites:

$days = $this->input->post("days"); 
$day = $days[0]; 
5

Une autre approche pourrait être de parcourir le tableau en utilisant foreach comme ceci:

foreach($this->input->post("days") as $day){ 
    echo $day; 
} 
1

En plus de la réponse de Daniel Egeberg:

S'il vous plaît noter que list() fonctionne uniquement avec tableaux numériques. Si vous/quelqu'un voulez lire un tableau associatif comme,

$_POST['date'] = array 
       (
        'day' => 12 
        'month' => 7 
        'year' => 1986 
       ) 

, utilisez la fonction extract() sur la matrice ci-dessus,

extract($this->input->post("date"), EXTR_PREFIX_ALL, "date"); 

Maintenant, les variables suivantes seront disponibles à utiliser comme,

$date_day = 19, $date_month = 7 and $date_year = 1986 

NOTE: dans la fonction ci-dessus, le premier argument est le tableau de poste, le second est de protéger contre les collisions de variables et le troisième est le préfixe .

Pour en savoir plus sur extract(), reportez-vous this. J'espère que cela aide :)

-1
for($i=0; $i<count($this->input->post("days")); $i++) 
{ 
    $day[$i] = $this->input->post("days[".$i."]"); 
} 

Ce serait utile si vous avez besoin d'interagir avec le db en vérifiant chaque valeurs transmises par votre point de vue comme un tableau. Sinon, je préfère foreach loop.

.. Vive

+0

'$ this-> input-> post (" jours [". $ I."] ") 'ne fonctionne pas comme vous le pensez. –

Questions connexes