Comment afficher un tableau associatif en PHP

j'ai le formulaire suivant:

<form action="options.php" method="post">
    <input type="text" name="deptid" id="deptid" />
    <input type="text" name="deptname" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

EDIT

Est-il possible de passer les deux valeurs dans un tableau associatif avant présentation ? Je voudrais de passer sous cette forme:

array('deptid'=>'deptname')

j'en ai besoin car j'évite de modifier le script du fichier php de destination(options.php)

Merci.

10
demandé sur Mp de la Vega 2012-12-27 11:08:28

7 réponses

Voici une méthode utilisant du HTML pur qui obtient vous près de exactement où vous voulez être, et n'utilise que des HTML:

<form action="options.php" method="post">
    <input type="text" name="options[deptid]" id="deptid" />
    <input type="text" name="options[deptname]" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

ce Qui vous permettrait d'en PHP:

$post_options = array(
    'options' => array(
        'deptid '=> '[that input element value]',
        'deptname' => '[that input element value]'
    )
);

ce que vous pouvez alors (y compris la désinfection) accès comme ceci:

$post_options = array('options');

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
    // Do whatever 
}

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
    // Do whatever 
}

EDIT

Ou... Vous souhaitez référencer deptid dans le input name attribuez et utilisez-le pour modifier la ligne d'un nom de ministère? Qui semble indiquer quelque chose comme ceci:

<?php

$deptid = 1;
$deptname = 'Department of Silly Walks';

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">

les résultats:

<input type="hidden" name="options[1]" value="Department of Silly Walks">

http://codepad.org/DtgoZGe7

Le problème, c'est que le $deptid la valeur devient une valeur qui n'est pas directement nommée ou référencée. Je pense que c'est potentiellement problématique à mettre en œuvre en raison de cette abstraction de la valeur du serveur vers le client et retour, donc je recommande ce que j'ai au sommet à la place. Il n'est pas beaucoup d'un différence dans la pratique, mais c'est plus ou moins auto-documentation.

notez que si vous voulez sérialiser une liste de départements, c'est un peu plus compliqué. Vous pourriez, par exemple, essayez ceci:

<input type="text" name="options[][deptid]" id="deptid" />
<input type="text" name="options[][deptname]" id="deptname" />

qui ajouterait une valeur indexée pour chaque input. Cependant... Ils ne seraient pas directement associés. Ainsi, vous obtiendriez, à la place, deux tableaux zéro-indexés pour chaque clé.

Ce que je vous suggère dans ce cas est d'utiliser Javascript pour ajouter chaque nouveau du ministère input éléments, de sorte que vous pouvez donner à chacun un nombre de la forme:

<input type="text" name="options[0][deptid]" id="deptid" />
<input type="text" name="options[0][deptname]" id="deptname" />
<br/>
<input type="text" name="options[1][deptid]" id="deptid" />
<input type="text" name="options[1][deptname]" id="deptname" />
<br/>
<input type="text" name="options[2][deptid]" id="deptid" />
<input type="text" name="options[2][deptname]" id="deptname" />
<br/>
<input type="text" name="options[3][deptid]" id="deptid" />
<input type="text" name="options[3][deptname]" id="deptname" />

Ou le faire à la vieille école de la PUBLICATION de la méthode et de l'utilisation de PHP count $POST['options'] et "manuellement" ajouter une nouvelle "ligne" d'intrants, avec le même indice. C'est un piège courant, donc tu dois y réfléchir si c'est ce que tu cherches à un moment donné.

22
répondu Jared Farrish 2012-12-27 07:35:50

$_POST est déjà un tableau associatif et je vous recommande de ne pas compliquer les choses au-delà de cette parce que $_POST contient déjà les données proviennent de votre formulaire.

$myassoc = $_POST;
print_r($myassoc);

et le tableau associatif que vous allez recevoir est créé et nommé même dans l'attribut name de la saisie d'éléments dans votre formulaire (y compris textarea)

Autres Aperçus

Comme je vois que votre code que vous souhaitez mettre le deptname données deptid quand il atteint le code côté serveur PHP. eh bien, la chose que vous pouvez faire avec est juste de l'attribuer à la touche deptid

$_POST['deptid'] = $_POST['deptname'];
$myassoc = $_POST;
print_r($myassoc);
6
répondu Mp de la Vega 2014-03-21 21:12:30
<form method="post">
    <input type="text" name="formdata['deptid']" />
    <input type="text" name="formdata['deptname']" />
    <input type="submit" />
</form>

<?php
    if(isset($_POST['formdata']))
    {
       $deptid = $_POST['formdata']['deptid'];
       $deptname = $_POST['formdata']['deptname'];
    }
?>
3
répondu Tahir Yasin 2012-12-27 07:14:11

$_POST est déjà un tableau associatif.

Vous pouvez reconstruire une matrice de la forme vous avez besoin simplement en attribuant $_POST à une variable

$myarray = $_POST;

maintenant $myarray est ce que vous avez besoin. Faire var_dump($myvar);.

0
répondu LoneWOLFs 2012-12-27 07:23:48

construisez un objet JS avec la structure appropriée, convertissez-le en JSON avec JSON.stringify(), le POSTER, et puis faire json_decode($_POST['data'],true).

vous aurez une copie exacte de l'objet JS, à PHP associate array. Déposer le deuxième paramètre de true pour obtenir un objet PHP.

0
répondu bearfriend 2013-06-27 15:16:34

Pourquoi voudriez-vous faire cela? Mais, vous POUVEZ envoyer des "tableaux" à travers des formes comme ceci:

<form method="post">
    <input type="text" name="textboxes[]" />
    <input type="text" name="textboxes[]" />
    <input type="submit" />
</form>

<?php
    if(isset($_POST['textboxes']))
        var_dump($_POST['textboxes']);
?>
-1
répondu David Harris 2012-12-27 07:10:55
$deptid = $_POST['deptid'];
$array = array($$deptid => $_POST['deptname']);
print_r($array);
-1
répondu Omiga 2012-12-27 07:13:15