Obtenir la matrice en cours de clé à l'intérieur de foreach
Ok, donc, je suis la construction de quelque chose pour mon employeur pour eux à l'entrée des produits, ils ont des exigences très spécifiques. J'ai un formulaire avec générées dynamiquement les champs comme si...
(évidemment pas le code exact à suivre, mais les exemples sont identiques sur le plan conceptuel)
<input type="text" name="attribute[20]"> inputted value = height
<input type="text" name="attribute[27]"> inputted value = width
les numéros sont générés sur la base de critères dans la base de données, donc 20 serait corrélée à la "largeur" du 27 serait corrélée à la "hauteur" par exemple.
Donc, une fois que l'utilisateur entre les valeurs j'ai besoin de ces valeurs pour aller dans une base de données...ou dans le test, l'echo.
foreach ($_POST['attribute'] as $attributes){
echo key($attributes).' '.$attributes.'<br>';
}
Ce qui devrait sortie...
20 valeur de la hauteur
27 valeur de la largeur de
mais au lieu de cela il sorties
hauteur de la valeur
la valeur de la largeur de
Ce qui se passe? J'ai quelque chose de similaire...mais un peu différent que le nombre défini peut avoir plus d'une entrée....ce qui fonctionne parfaitement.
<input type="text" name="option[][20]"> inputted value = option 1
<input type="text" name="option[][20]"> inputted value = option 2
<input type="text" name="option[][27]"> inputted value = option 1
foreach ($_POST['option'] as $options){
echo key($options).' ';
foreach ($options as $option){
echo $option.'<br>';
}
qui sort parfaitement...
20 option 1
20 option 2
27 option 1
Je ne comprends pas pourquoi le plus complexe des œuvres et la plus simple, ne l'est pas, ai-je raté quelque chose d'évident? Je suis conscient que j'ai un peu orthodoxe de la méthode de codage par rapport à certains, mais c'est ce que c'est lol. Toute aide serait grandement appréciée.
EDIT: Var dump comme demandé
array(22) { ["pID"]=> string(12) "test produit" ["ce tarif"]=> string(0) "" ["pName"]=> string(0) "" ["régime"]=> string(0) "" ["pPostSize"]=> string(0) "" ["pOurPrice"]=> string(0) "" ["pEstDelivery"]=> string(0) "" ["pWeight"]=> string(0) "" ["e"]=> string(0) "" ["pOrder"]=> string(0) "" ["pStock"]=> string(0) "" ["pManufacturer"]=> string(0) "" ["pType"]=> string(13) "Robinets de Douche" ["pRange"]=> string(0) "" ["chat"]=> array(2) { [0]=> string(2) "72" [1]=> string(2) "23" } ["attribut"]=> array(2) { [0]=> string(5) "largeur" [1]=> string(6) "hauteur" } ["option"]=> array(3) { [0]=> array(1) { [11]=> string(6) "works1" } [1]=> array(1) { [10]=> string(6) "works1" } [2]=> array(1) { [10]=> string(6) "works2" } } ["pLongdescription"]=> string(0) "" ["meta_description"]=> string(0) "" ["meta_keyword"]=> string(0) "" ["meta_title"]=> string(0) "" ["action"]=> string(6) "créer" }
le gras pièces, sont les parties qui ont réussi à sortir dans mon deuxième exemple. mais le gras italique comme vous pouvez le voir, renvoie 0 au lieu des 20 qui est réellement dans la forme valeur de nom.
Pas besoin, fonctionne très bien grâce aux conseils reçus de Jim et de vous-même, même si votre être condescendant dans le ton. Mais je vous remercie tout de même.
Content que l'on pourrait vous ont aidé à vous faire comprendre mieux!
OriginalL'auteur GestaltO | 2012-12-13
Vous devez vous connecter pour publier un commentaire.
Noter ici que vous êtes en boucle sur le tableau d'attributs dans le post. $les attributs de la valeur pour chaque champ (et n'est donc pas un tableau.
Au lieu d'utiliser
key()
essayer:Pouvez-vous montrer un var_dump de
$_POST
?Ajoutés à la question.
Merci pour votre aide Jim.
OriginalL'auteur Jim
Selon le PHP la documentation de la touche():
La documentation (et l'exemple) montre que vous avez besoin pour fournir les tableau comme paramètre, où vous êtes à l'aide de la valeur.
Donc l'utiliser quelque chose comme ceci:
Même si vous remarquez que sont conscients que vous avez un " peu orthodoxe de la méthode de codage par rapport à certains, il serait beaucoup mieux d'utiliser le
foreach
-boucle de cette façon:comme le
key()
méthode semble un peu "bancale" pour moi (dépend de pointeurs internes).Découvrez la foreach documentation pour plus d'informations sur cette utilisation.
Votre deuxième exemple fonctionne par accident, probablement parce que vous utilisez la
$options
tableau dans votre deuxièmeforeach
en boucle... 🙂 Comme indiqué dans la documentation, vous devez fournir les array commekey()
paramètre et de vous fournir le tableau en tant que paramètre.Mais j'ai essayé et ça ne fonctionne toujours pas faire ce que je veux lol. Le deuxième exemple, pourrait bien être au travail par accident, mais c'est exactement ce que je veux 😉
le
echo key($options)
dans votre deuxième 'travail' exemple, devrait montrer les touches de la première dimension de la matrice. Qui ne sont pas définies et doit retourner une valeur vide. Au lieu de cela ils heureusement, afficher les valeurs de la deuxième dimension de votre tableau 2d parce que vous utilisez$options
dans votre deuxièmeforeach
boucle... Si vous êtes heureux avec ce résultat, être mon invité... 🙂 Mais ne vous attendez pas à ce que ce type de "chance" qui fonctionne pour votre premier exemple de code!Ah je vois ce que tu veux dire. J'ai effectivement essayé d'utiliser une approche 2d à imiter l'exemple de travail et il fait exactement ce que vous avez décrit, retourné des valeurs vides.
OriginalL'auteur Veger
Ok, donc, j'ai résolu, avec l'aide de vous les gars et la prise de conscience que j'avais été un peu stupide et seulement modifié la partie statique de la forme à intégrer la dynamique de la clé et non pas de l'ajax généré partie qui la remplace.
Fonctionne parfaitement. merci pour les conseils les gars.
OriginalL'auteur GestaltO